【问题标题】:Authenticate as administrator?以管理员身份进行身份验证?
【发布时间】:2011-09-18 08:00:51
【问题描述】:

我正在开发一个安装程序,我想写入一个只有管理员可以访问的文件夹。因此,我需要显示 UAC 对话框并以管理员身份进行身份验证。我知道我可以通过从安装程序 GUI 运行一个单独的可执行文件来做到这一点,但我更喜欢一个允许我在应用程序中随时进行身份验证的解决方案。这在 .NET 中可行吗?

【问题讨论】:

    标签: .net vb.net uac windows-authentication


    【解决方案1】:

    您不能在进程中间更改特权级别,一旦进程启动,它就会停留在该特权级别。您必须启动具有提升权限的单独进程并与 IPC 通信以更新 GUI。

    如果您正在编写安装程序,最好将安装程序自己的应用程序清单标记为本身的管理权限,这样它就会在启动时请求管理员权限,因为您每次都需要它。

    【讨论】:

    • 我不想这样做的原因(例如立即请求管理员权限)是因为我也希望能够安装到本地/appdata 文件夹。
    • 然后您将需要在没有 GUI 的情况下生成第二个进程并使用某种形式的 IPC(WCF 可能会使用管道,但您必须使用默认权限当您有一个高权限进程与低权限进程通信时,那些将不起作用)告诉它该做什么。
    【解决方案2】:

    您必须为Manifest 文件运行具有此配置的新进程:

    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="requireAdministrator" />
      </requestedPrivileges>
    </security>
    

    【讨论】:

      【解决方案3】:

      作为启动提升新进程的替代方法,您可以创建提升的新 COM 对象。


      一些安装程序使用类似于您尝试执行的方法。 foobar2000 installer 就是一个例子。在第一个屏幕上,它会询问标准(所有用户) 或便携式设置在哪里。如果选择了标准,它会提示提升并重新启动。

      因此,您最简单的选择是从用户那里收集数据,然后以管理员身份重新启动自身或另一个可执行文件,以执行实际工作,通过用户的选择传递参数。

      【讨论】:

        猜你喜欢
        • 2013-07-10
        • 2019-06-02
        • 1970-01-01
        • 1970-01-01
        • 2011-11-30
        • 1970-01-01
        • 2018-12-05
        • 2011-01-11
        相关资源
        最近更新 更多