如果路径受到保护,请求Windows Vista UAC提升?

sie*_*ben 27 .net c# uac windows-vista elevated-privileges

对于我的C#应用​​程序,我不想总是在应用程序启动时提示提升,但如果他们选择了受UAC保护的输出路径,那么我需要请求提升.

那么,如何检查路径是否受UAC保护,然后如何请求提升执行中?

Adr*_*ark 26

检测他们是否无法执行操作的最佳方法是尝试并捕获UnauthorizedAccessException.

但是,正如@ DannySmurf 正确指出的那样,您只能提升COM对象或单独的进程.

Windows SDK Cross Technology Samples中有一个名为UAC Demo的演示应用程序.此演示应用程序显示了使用提升的进程执行操作的方法.它还演示了如何确定用户当前是否为管理员.


The*_*urf 16

请求提升中期执行要求您:

  1. 使用提升的COM控件,这将提示
  2. 启动从头开始升级的第二个进程.

在.NET中,目前无法提升正在运行的进程; 你必须做一件上面的hackery事情,但所做的就是给用户一个当前进程被提升的外观.

我能想到的唯一方法是检查一个路径是否是UAC提升的,就是在你处于未升级状态时尝试对它进行一些简单的写操作,捕获异常,提升并再试一次.

  • 请注意,这不是.NET限制 - 它是用户帐户控制系统的一般限制. (7认同)
  • 请注意,这不是UAC限制 - 它是Windows NT中安全模型的一般限制(正在运行的进程无法更改其安全令牌). (4认同)
  • 请注意,这是一件好事 - 否则恶意攻击者可以将代码注入预提升过程,并且此代码将与此过程一起提升。 (2认同)