27

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

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

4

6 回答 6

26

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

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

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

于 2008-09-18T06:10:20.783 回答
17

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

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

在 .NET 中,目前没有办法提升正在运行的进程;你必须做上面的一件骇人听闻的事情,但所做的只是给用户一个当前进程正在被提升的外观。

我能想到的检查路径是否被 UAC 提升的唯一方法是在您处于未提升状态时尝试对其进行一些琐碎的写入,捕获异常,提升并重试。

于 2008-08-20T07:56:07.667 回答
4

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

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

于 2010-05-05T13:50:47.283 回答
1

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

于 2008-08-20T08:07:10.917 回答
-1

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

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

如果您确实循环了 FolderBrowserDialog ,请确保通知用户原因,这样他们就不会对您的应用程序生气。

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

于 2008-08-20T10:07:06.183 回答
-1

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

于 2009-11-30T10:43:30.303 回答