程序启动时如何请求管理员权限



我需要我的软件能够以管理员身份在Windows Vista上运行(如果有人在没有管理权限的情况下运行它,它会崩溃)。

当启动其他软件时,我看到系统提示"此软件将以管理员身份运行"。

当应用程序试图获取管理权限时。

在Windows Vista上运行c#应用程序时,我如何请求管理权限?

将以下内容添加到您的manifest文件中:

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

您也可以使用highestAvailable作为级别。

看这里嵌入清单文件:

http://msdn.microsoft.com/en-us/library/bb756929.aspx

PS:如果你没有一个清单文件,你可以很容易地添加一个新的:

在Visual Studio中,右键单击project -> Add Item -> Choose

应用程序清单文件(在通用下用于Visual c#项目)

添加的文件将已经包含上述部分,只需将级别从asInvoker更改为requireAdministrator

将此XML放入名为yourexename.exe.manifest的文件中:

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
   <security>
     <requestedPrivileges>
        <requestedExecutionLevel level="highestAvailable" />
     </requestedPrivileges>
   </security>
</trustInfo>
</assembly>

您需要在清单中使用requestedExecutionLevel令牌:

http://www.developerfusion.com/code/7987/making-a-net-app-run-on-vista-with-administrator-priviledges/

对于.Net (Visual Studio 2013),包含一个请求管理员提升的清单文件,并使用编译器的/win32manifest标志,编写并提供一个请求此提升的清单文件。但是,下面描述在Visual Studio中为项目名称App.Exe:

执行此操作。
  1. 创建一个具有以下内容的文件(为了方便,您可以通过确保它的Build ActionNone, Copy to Output...Do not copy将该文件添加到Visual Studio项目中作为开发资源)。按照惯例,清单文件以它们的输出目标命名,在本例中是App.Exe.manifest。如果需要uiAccess(用户界面),程序集必须是强命名的。

    <?xml version="1.0" encoding="utf-8" ?>
    <asmv1:assembly manifestVersion="1.0" 
        xmlns="urn:schemas-microsoft-com:asm.v1"
        xmlns:asmv1="urn:schemas-microsoft-com:asm.v1"
        xmlns:asmv2="urn:schemas-microsoft-com:asm.v2"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <assemblyIdentity version="1.0.0.0" name="App" />
      <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
        <security>
          <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
            <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
          </requestedPrivileges>
        </security>
      </trustInfo>
    </asmv1:assembly>
    
  2. 编辑项目对话框的构建面板Other flags:输入字段,以添加win32manifest标志,并使Visual Studio相应地调用编译器。例如,在本例中

    /win32manifest:App.Exe.manifest .

注意以下条目:

  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>

最新更新