如果path受保护,请求Windows Vista UAC提升?
对于我的C#应用程序,我不想总是在应用程序启动时提示提升,但是如果他们selectUAC保护的输出path,那么我需要请求提升。
那么,如何检查path是否受到UAC保护,然后如何请求提升中期执行?
检测它们是否无法执行操作的最佳方法是尝试它并捕获UnauthorizedAccessException
。
但是,@ DannySmurf 正确地指出,你只能提升COM对象或单独的进程。
在Windows SDK交叉技术示例中有一个演示应用程序叫做UAC演示 。 这个演示应用程序展示了一个用高级进程执行动作的方法。 它还演示如何找出用户当前是否是pipe理员。
在执行中请求提升要求您:
- 使用提升的COM控件,这将提示一个提示
- 开始第二个从一开始就被提升的过程。
在.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也应该显示如何做到这一点