加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 04:28:39 所属栏目:百科 来源:网络整理
导读:我有这个应用程序需要在受保护的路径中做一些事情(如%PROGRAMFILES%),我知道我应该使用%APPDATA%,但我现在无法改变它.我已经隔离了所有可能需要UAC出现在另一个项目上的东西,这里是一个示例代码: using System;using System.Diagnostics;using System.I
我有这个应用程序需要在受保护的路径中做一些事情(如%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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读