
Request Windows Vista UAC elevation if path is protected?对于我的C#应用程序,我不想总是在应用程序启动时提示提升权限,但是如果他们选择受UAC保护的输出路径,那么我需要请求提升权限。 因此,如何检查路径是否受UAC保护,然后如何请求提升中间执行?
检测他们是否无法执行操作的最佳方法是尝试执行并捕获 但是,正如@DannySmurf正确指出的那样,您只能提升COM对象或单独的进程。 Windows SDK交叉技术示例中有一个名为UAC演示的演示应用程序。该演示应用程序展示了一种通过提升的流程执行动作的方法。它还演示了如何确定用户当前是否为管理员。 请求高程中间执行要求您执行以下任一操作: 在.NET中,当前无法提升正在运行的进程。您必须执行上述骇客行为之一,但是所有要做的就是使用户看上去正在提升当前进程。 我能想到的唯一检查路径是否为UAC高架的方法是尝试在未处于高架状态时对它进行一些琐碎的写入,捕获异常,升高并重试。 我不确定这是否对您有帮助,但是您可以查看此博客文章: http://haishibai.blogspot.com/2010/01/tiy-try-out-windows-7-uac-using-c-part_26.html 您可能想通知用户该路径受保护,并要求他们将文件输出到"更安全"的区域。这样,您的应用将不需要提升。我确定这取决于您的用户和您要执行的操作,但是,我不认为要让用户知道将xyz转储到Windows / System32文件夹中并不觉得太过分。 UAC可以基于其GUID来提升对象,这(理论上)意味着可以提升任何具有GUID的类,UACDemo还应该展示如何做到这一点。 如果您的辅助驱动器拥有它自己的文件权限,例如说您在其上安装了Windows的其他副本。它将提示。 它还会提示是否正在使用文件,如果您将Windows资源管理器打开到同一目录,并且使用显示内容的文件预览器选择了文件,则有时会发生这种情况……还有其他一些奇怪之处,但是通常会要求您提供文件权限(如果文件正在使用或它是一个敏感目录)。 如果您确实循环执行FolderBrowserDialog,请确保通知用户原因,以免他们生气您的应用程序。 注意:它确实使.net没有寻求许可的方式,也许是p /调用win32 api ...? |