C#应用程序自动请求以管理员身份运行



Windows 7及更新版本的操作系统增加了 UAC(用户账户控制) 的安全机制,如果 UAC 被打开,用户即使以管理员权限登录,其应用程序默认情况下也无法对系统目录、系统注册表等可能影响系统正常运行的设置进行写操作,这个机制大大增强了系统的安全性。

但有时应用程序确实需要修改系统目录、系统注册表等操作,在确保安全的前提下,用户可以右键单击应用程序,选择"以管理员身份运行"运行即可:





但对应用程序开发者来说,我们不能强迫用户去关闭UAC,最好也不要让用户每次手工选择以管理员身份运行,有没有办法自动弹出请求以管理员身份运行,用户只需选择是或否呢?

可以实现,给C#应用程序项目新建一个应用程序清单文件(app.manifest),然后将清单文件中 Windows 用户帐户控制级别由默认的asInvoker改为requireAdministrator,重新生成项目即可:



<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
  <security>
    <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="requireAdministrator" uiAccess="false" />
    </requestedPrivileges>
  </security>
</trustInfo>



评论: 0 | 引用: 0 | 查看次数: 514
发表评论
登录后再发表评论!