对于我的C#应用程序,我不想总是在应用程序启动时提示提升,但如果他们选择了受UAC保护的输出路径,那么我需要请求提升.
那么,如何检查路径是否受UAC保护,然后如何请求提升执行中?
检测他们是否无法执行操作的最佳方法是尝试并捕获UnauthorizedAccessException
.
但是,正如@ DannySmurf 正确指出的那样,您只能提升COM对象或单独的进程.
Windows SDK Cross Technology Samples中有一个名为UAC Demo的演示应用程序.此演示应用程序显示了使用提升的进程执行操作的方法.它还演示了如何确定用户当前是否为管理员.
请求提升中期执行要求您:
使用提升的COM控件,这将提示
启动从头开始升级的第二个进程.
在.NET中,目前无法提升正在运行的进程; 你必须做一件上面的hackery事情,但所做的就是给用户一个当前进程被提升的外观.
我能想到的唯一方法是检查一个路径是否是UAC提升的,就是在你处于未升级状态时尝试对它进行一些简单的写操作,捕获异常,提升并再试一次.