2011-10-05 182 views
62

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

当启动其他软件时,我看到系统提示“此软件将以管理员身份运行,您要继续吗?”当应用程序试图获得管理权限时。

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

+4

请不要忘记,这样做只隐藏了潜在的问题,它不能解决它。即使你的程序确实需要管理员权限,它也不会崩溃,如果它没有得到它们。最可能的原因是您无法在系统调用后检查错误情况。 –

回答

106

以下添加到您的清单文件:

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

您还可以使用highestAvailable的水平。

看吧有关嵌入清单文件:

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

PS:如果你没有一个清单文件,你可以方便地添加一个新问题:

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

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

+2

帮我了解添加清单文件的信息!谢谢 – swdev

+0

值得一提的是,如果您以这种方式在VS中添加应用程序清单文件,那么您将获得一个包含许多其他选项的模板(例如,说您的应用程序仅适用于Windows 10及更高版本。)在VS2017上测试。 –

12

将这个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> 
0

对于F#的Visual Studio 2013 ,包括使用FSharp编译器的/win32manifest标志请求管理员提升的清单文件,如下所示。因此,考虑名为“APP.EXE”项目输出

  1. 创建一个包含以下内容(为了方便起见,文件可能会在文件中添加 到项目,确保它的 Build ActionNone' 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

相关问题