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

时间:2008-08-20 07:50:29

标签: c# .net windows-vista uac elevated-privileges

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

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

6 个答案:

答案 0 :(得分:26)

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

但是,作为@ DannySmurf correctly points out,您只能提升COM对象或单独的进程。

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

答案 1 :(得分:16)

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

  1. 使用已提升的COM控件,这将提示
  2. 启动从头开始升级的第二个流程。
  3. 在.NET中,目前无法提升正在运行的进程;你必须做一件上面的hackery事情,但所有这一切都会给用户提供当前进程升级的外观。

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

答案 2 :(得分:3)

我不确定这对你有什么帮助,但你可以看一下这篇博文:

http://haishibai.blogspot.com/2010/01/tiy-try-out-windows-7-uac-using-c-part_26.html

答案 3 :(得分:1)

您可能希望通知用户该路径受到保护,并要求他们将文件输出到“更安全”的区域。这样您的应用就不需要提升了。我确定这取决于你的用户以及你想要做什么,但我不认为让用户知道你不能将xyz转储到Windows / System32文件夹中是太多了。

答案 4 :(得分:-1)

如果您的辅助驱动器拥有自己的文件权限,比如说您安装了其他Windows副本。它会提示。

它还会提示文件是否正在使用中,如果您将Windows资源管理器打开到同一目录并且文件预览器显示内容选择了文件,有时会出现这种情况...还有一些其他的奇怪之处,但通常会得到如果文件正在使用或者它是敏感目录,则询问文件权限。

如果您循环使用FolderBrowserDialog,请务必通知用户原因,以免他们对您的应用感到生气。

注意:它确实没有.net方式请求许可,也许p /调用win32 api ...?

答案 5 :(得分:-1)

UAC可以根据他们的GUID提升对象,这(理论上)意味着任何具有GUID的类都可以提升,UACDemo也应该显示如何执行此操作