【问题标题】:Is it possible to show UAC dialog for one thread in application?是否可以在应用程序中为一个线程显示 UAC 对话框?
【发布时间】:2011-12-17 20:23:15
【问题描述】:

我有一个方法,想用具有管理员权限的新线程运行它,

[PrincipalPermission(SecurityAction.Demand, Role = @"BUILTIN\Administrators")]
    void Install()
    {
      //do some thing
    }

我是这样运行的,

installerTh = new Thread(new ThreadStart(Install));
        installerTh.Name = "Installer";
        installerTh.Start();

但它给了我错误

System.Security.SecurityException 未处理

Message=请求主体权限失败。

在运行此线程之前显示 UAC 窗口的任何想法? (或在运行过程中)

【问题讨论】:

  • 你见过这个问题吗:stackoverflow.com/questions/17533/…
  • 嗨丹尼尔,他们解释了如何启动新的特权进程,我想为我当前正在运行的线程或进程授予特权。

标签: c# wpf security


【解决方案1】:

UAC 要么全有,要么全无。您不能将 UAC 提示应用于单个线程,只能应用于进程。您需要做的是使用 UAC 使用特殊命令行启动您的应用程序,命令行将让您知道启动您想要的线程。它不必是命令行,您可以使用任何类型的 IPC 让生成的进程知道运行线程。我写了一个关于在 UAC here 下启动进程的答案。

您可能还需要考虑获取代码签名证书,这样 UAC 对话框就不会一直显示“未知”作为发布者。

更新:根据您上面的评论,您也不能将 UAC 应用于当前正在运行的进程,只能应用于新进程。

【讨论】:

  • 谢谢亲爱的马修,我确定只有新流程吗?没有办法运行一个,因为 VS.NET 在想要做某事需要特权访问时需要重新启动。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-05
  • 1970-01-01
  • 2014-11-16
  • 1970-01-01
  • 2011-01-30
  • 1970-01-01
相关资源
最近更新 更多