首页 / 知识

关于c#:如果路径受保护,请求Windows Vista UAC提升?

2023-04-12 14:27:00

关于c#:如果路径受保护,请求Windows Vista UAC提升?

Request Windows Vista UAC elevation if path is protected?

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

因此,如何检查路径是否受UAC保护,然后如何请求提升中间执行?


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

但是,正如@DannySmurf正确指出的那样,您只能提升COM对象或单独的进程。

Windows SDK交叉技术示例中有一个名为UAC演示的演示应用程序。该演示应用程序展示了一种通过提升的流程执行动作的方法。它还演示了如何确定用户当前是否为管理员。


请求高程中间执行要求您执行以下任一操作:

  • 使用提升的COM控件,它将显示一个提示
  • 启动从头开始的第二个过程。
  • 在.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 ...?


    提升路径请求应用程序

    最新内容

    相关内容

    热门文章

    推荐文章

    标签云

    猜你喜欢