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

C# 如何在程序启动时请求管理员权限?,c#,windows,windows-7,windows-vista,C#,Windows,Windows 7,Windows Vista,我需要我的软件能够在Windows Vista上以管理员身份运行(如果有人在没有管理权限的情况下运行它,它将崩溃) 当启动其他软件时,我看到系统在应用程序试图获取管理权限时发出的提示,如“此软件将以管理员身份运行。是否继续?” 在Windows Vista上运行c#应用程序时,如何请求管理权限?将以下内容添加到清单文件中: <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 您还可以

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

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


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

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

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

您还可以对该级别使用
highestAvailable

请查看以下关于嵌入清单文件的信息:

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

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


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

更改为
requireAdministrator
,您需要在清单中使用
requestedExecutionLevel
标记:


将此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>
对于F#Visual Studio 2013,包括使用FSharp编译器的
/win32manifest
标志请求管理员提升的清单文件,如下所示对我有效。因此,给定一个名为“App.Exe”的项目输出

  • 创建包含以下内容的文件(为方便起见,您可以添加 将文件复制到项目中。请确保
    生成操作
    无”且
    复制到输出…
    不复制
    
    约定这样的文件名为
    
    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>
    
    
    
  • 编辑项目对话框生成面板的
    其他标志:
    输入字段以包括以下内容:
    /win32manifest:
    。例如,在本例中,
    /win32manifest:App.Exe.manifest


  • 请不要忘记,这样做只会隐藏潜在的问题,而不会修复它。即使您的程序确实需要管理员权限,但如果没有获得这些权限,它也不会崩溃。最可能的原因是您未能在系统调用后检查错误情况。值得一提的是,如果您添加应用程序Manifest文件在VS中,通过这种方式,您可以在那里获得一个带有许多其他选项的模板(比如说,您的应用程序只能在Windows 10及以上版本上运行)在VS2017上测试。@PerLundberg-不值得一提,因为最初的提问者没有问这个问题——他问了管理员Permissions@Momoro关于SO的问题不仅是为了OP,也是为了社区的更大利益。其他人在寻找其他解决方案时可能会发现这个问题,而不仅仅是OP所要求的一般来说,教人们“你可以用应用程序清单做这些事情”并没有什么坏处。我并不是在暗示什么粗鲁的事情(如果我是这样的话,很抱歉),我只是在阅读旧的答案/问题,有点困惑:d