代码之家  ›  专栏  ›  技术社区  ›  sieben

如果路径受保护,请求Windows Vista UAC升级?

  •  27
  • sieben  · 技术社区  · 16 年前

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

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

    6 回复  |  直到 9 年前
        1
  •  26
  •   Community CDub    8 年前

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

    然而,正如@ DannySmurf correctly points out 您只能提升COM对象或单独的进程。

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

        2
  •  16
  •   TheSmurf    16 年前

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

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

    在。NET,目前无法提升正在运行的进程;你必须做上面的一件小事,但所做的只是给用户一种当前流程正在提升的外观。

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

        3
  •  3
  •   Ruben Bartelink    14 年前

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

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

        4
  •  1
  •   Brian Leahy    16 年前

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

        5
  •  -1
  •   Brian Leahy    16 年前

    如果你的辅助驱动器有自己的文件权限,比如说你安装了另一个windows副本。它会提示。

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

    如果你循环FolderBrowserDialog,一定要通知用户原因,这样他们就不会对你的应用程序生气。

    注意:它确实很臭,没有.net请求权限的方式,可能是p/调用win32api。..?

        6
  •  -1
  •   Tristan    15 年前

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

    推荐文章