如果path受保护,请求Windows Vista UAC提升?

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

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

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

但是,@ DannySmurf 正确地指出,你只能提升COM对象或单独的进程。

在Windows SDK交叉技术示例中有一个演示应用程序叫做UAC演示 。 这个演示应用程序展示了一个用高级进程执行动作的方法。 它还演示如何找出用户当前是否是pipe理员。

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

  1. 使用提升的COM控件,这将提示一个提示
  2. 开始第二个从一开始就被提升的过程。

在.NET中,目前没有办法提升正在运行的进程; 你必须做一个上面的黑客的事情,但所做的一切就是让用户看起来目前的进程正在提升。

我能想到的唯一方法是检查UAC是否boost,当你处于未boost的状态时,试着做一些微不足道的写操作,抓住exception,提升并再试一次。

我不确定这对你是否有任何帮助,但你可以看看这个博客文章:

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

您可能想要通知用户path已被保护,并要求他们将文件输出到“安全”区域。 这样你的应用程序将不需要提升。 我相信这取决于你的用户和你正在做什么,但我不认为这是太多的好心让用户知道你不觉得倾倒xyz到Windows / System32文件夹。

如果你的第二个驱动器有它自己的文件权限,比如说你有另一个安装的窗口副本。 它会提示。

它也会提示是否文件正在使用,有时如果你有Windows资源pipe理器打开到相同的目录和文件预览器显示内容select的文件有时会出现…还有一些其他的怪异,但通常你会被要求的文件权限,如果该文件正在使用或它是一个敏感的目录。

如果你做循环的FolderBrowserDialog,一定要通知用户为什么,所以他们不生气在你的应用程序。

注:它确实没有.net方式的请求权限,也许p /调用win32 api …?

UAC可以根据它们的GUID提升对象,这(理论上)意味着任何带有GUID的类都可以被提升,UACDemo也应该显示如何做到这一点