码迷,mamicode.com
首页 > Windows程序 > 详细

To Run as Administrator in WPF

时间:2016-06-09 15:59:55      阅读:1072      评论:0      收藏:0      [点我收藏+]

标签:

WPF以管理员身份运行

  在Vista 和 Windows 7 及更新版本的操作系统,增加了 UAC(用户账户控制) 的安全机制,如果 UAC 被打开,用户即使以管理员权限登录,其应用程序默认情况下也无法对系统目录、系统注册表等可能影响系统正常运行的设置进行写操作。这个机制大大增强了系统的安全性,但对应用程序开发者来说,我们不能强迫用户去关闭UAC,但有时我们开发的应用程序又需要以 Administrator 的方式运行,如何实现这样的功能呢?

    1. 启用ClickOnce安全设置

        首先打开解决方案资源管理器中的Properties。

      技术分享

        在左侧标签栏中选择”安全性“选项,并选择”启用ClickOnce安全设置“。

      技术分享

    2. 更改app.manifest

        打开Properties下的app.manifest,可以看到许多关于程序启动的配置。其中有一段是这样的:

      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
              <!-- UAC 清单选项
                   如果想要更改 Windows 用户帐户控制级别,请使用
                   以下节点之一替换 requestedExecutionLevel 节点。n
              <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
              <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
              <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />
      
                  指定 requestedExecutionLevel 元素将禁用文件和注册表虚拟化。
                  如果你的应用程序需要此虚拟化来实现向后兼容性,则删除此
                  元素。
              -->
              <requestedExecutionLevel level="asInvoker" uiAccess="false" />
      </requestedPrivileges>

        我们可以看到这个配置中有一个 requestedExecutionLevel 项,这个项用于配置当前应用请求的执行权限级别。这个项有3个值可供选择,如下表所示:

      Value Description Comment
      asInvoker The application runs with the same access token as the parent process. Recommended for standard user applications. Do refractoring with internal elevation points, as per the guidance provided earlier in this document.
      highestAvailable The application runs with the highest privileges the current user can obtain. Recommended for mixed-mode applications. Plan to refractor the application in a future release.
      requireAdministrator The application runs only for administrators and requires that the application be launched with the full access token of an administrator. Recommended for administrator only applications. Internal elevation points are not needed. The application is already running elevated.

        

        asInvoker :以当前的权限运行。

        highestAvailable: 以当前用户可以获得的最高权限运行。

        requireAdministrator: 仅以系统管理员权限运行。

        默认情况下是 asInvoker。

        highestAvailable 和 requireAdministrator 这两个选项的区别在于,如果我们不是以管理员帐号登录,那么如果应用程序设置为 requireAdministrator ,那么应用程序就直接运行失败,无法启动。而如果设置为 highestAvailable,则应用程序可以运行成功,但是是以当前帐号的权限运行而不是系统管理员权限运行。如果我们希望程序在非管理员帐号登录时也可以运行(这种情况下应该某些功能受限制) ,那么建议采用 highestAvailable 来配置。

        所以,只要把设定启动权限的一行:

      <requestedExecutionLevel level="asInvoker" uiAccess="false" />

        改为  

      <requestedExecutionLevel level="asInvoker" uiAccess="false" />

        就可以以管理员权限启动了。 

  还有一种方法判断是否已管理员身份启动,如果返回为true则为管理员身份启动:

public static bool IsAdministrator()
{
    return new System.Security.Principal.WindowsPrincipal(System.Security.Principal.WindowsIdentity.GetCurrent()).IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator);
}

To Run as Administrator in WPF

标签:

原文地址:http://www.cnblogs.com/Bita/p/5572319.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!