c# – 皮条客我的UAC和一些关于它的问题

前端之家收集整理的这篇文章主要介绍了c# – 皮条客我的UAC和一些关于它的问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有这个应用程序需要在受保护的路径中做一些事情(如%PROGRAMFILES%),我知道我应该使用%APPDATA%,但我现在无法改变它.我已经隔离了所有可能需要UAC出现在另一个项目上的东西,这里是一个示例代码
using System;
using System.Diagnostics;
using System.IO;
using System.Windows.Forms;

class Class1
{
    static void Main(string[] args)
    {
        try
        {
            File.CreateText(Path.Combine(Application.StartupPath,"something.txt"));
        }
        catch (UnauthorizedAccessException ex)
        {
            MessageBox.Show(ex.Message,"UnauthorizedAccessException",MessageBoxButtons.OK,MessageBoxIcon.Error);

            if (args.Length == 0)
            {
                Process proc = new Process();
                proc.StartInfo.FileName = Application.ExecutablePath;
                proc.StartInfo.Arguments = "not again";
                proc.StartInfo.Verb = "runas";
                proc.Start();
            }
            else
            {
                MessageBox.Show("Exit to avoid loop.");
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message,"Exception",MessageBoxIcon.Error);
        }
    }
}

所以,我从我的主程序中调用这个可执行文件,如果由于未经授权的访问而失败,它将自动启动显示UAC请求.

我的问题是:

1)我不得不将项目输出从DLL转换为EXE,因为我找不到任何方法从DLL请求UAC提升,有没有简单的方法呢?

2)我还注意到有些程序显示了个性化的UAC消息,带有程序徽标和所有这些东西,让我给大家展示一个例子:

我怎么能为我的程序做到这一点?

3)为了避免在使用提升的权限运行时进入循环,它会获得另一个UnauthorizedAccessException我做了那个传递任何args的东西.你会做些什么来实现同样的目标?

我想这就是现在.谢谢你的时间.

解决方法

1您无法控制托管DLL的进程的提升模式.如果您可以控制安装过程,则可以为每个人 during the install process提供 grant permission to the target folder or registry.

2您需要sign the program with a certificate published by a certificate authority that would be trusted by the client.访问您当地的证书商店(控制面板 – >互联网选项,内容标签,发布商)以查看常见的证书颁发机构.

3当您获得UnauthorizedAccessExceotion时,将其抛给托管exe或返回指示安全问题的错误值.然后,DLL的调用者决定要做什么,例如显示安全错误对话框以通知用户程序是否已被提升(域控制器未授予权限?),如果未提升,则为restarting the process in elevated mode using the runas command.

原文链接:https://www.f2er.com/csharp/91464.html

猜你在找的C#相关文章