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


79

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

启动其他软件时,我看到系统提示“此软件将以管理员身份运行。是否要继续?” 当应用尝试获取管理权限时。

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


6
请不要忘记这样做只会隐藏潜在的问题,并不能解决问题。即使您的程序确实需要管理员权限,如果没有获得管理员权限,也不应崩溃。最可能的原因是您在系统调用后未能检查错误情况。
哈里·约翰斯顿

Answers:


141

将以下内容添加到清单文件中:

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

您也可以将其highestAvailable用于关卡。

在这里查看有关嵌入清单文件的信息:

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

PS:如果没有清单文件,则可以轻松添加一个新文件:

在Visual Studio中,右键单击项目->添加项目->选择应用程序清单文件(在Visual C#项目的常规下)

添加的文件已经具有以上部分,只需将级别更改requireAdministratorasInvoker


2
值得一提的是,如果您以这种方式在VS中添加应用程序清单文件,则会在其中获得带有许多其他选项的模板(例如,说您的应用程序仅适用于Windows 10及更高版本。)已在VS2017上进行了测试。
Per Lundberg

@PerLundberg-值得一提的是,因为原始的Ask-er并未对此提出
疑问

2
@Momoro有关SO的问题不仅是为了OP,也是为了社区的更大利益。其他人寻找其他解决方案时,可能会发现这个问题,不仅究竟是什么OP询问。通常,教人们“您可以使用应用程序清单来完成这些事情”并没有什么害处。
Per Lundberg

我不是在暗示任何粗鲁的东西(对不起,如果碰到那样的话),我只是在阅读旧的答案/问题,并感到有点困惑:D
Momoro

14

将此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>


-1

对于F#Visual Studio 2013,包括一个清单文件,该文件使用FSharp编译器的/win32manifest标志要求管理员提升权限,如下所示对我有用。因此,给定一个名为“ App.Exe”的项目输出

  1. 创建一个具有以下内容的文件(为方便起见,您可以将文件添加到项目中。确保它 Build Action是“None' and复制到输出...”。is请勿复制. By convention such a file is named 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:<ApplicationManifestFile>。例如,在这种情况下,/win32manifest:App.Exe.manifest

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.