程序启动时如何请求pipe理员权限?
我需要我的软件能够在Windows Vista上以pipe理员身份运行(如果有人在没有pipe理权限的情况下运行它,将会崩溃)。
当启动其他软件时,我看到系统提示“这个软件会以pipe理员身份运行,你想继续吗?” 当应用程序试图获得pipe理权限。
如何在Windows Vista上运行c#应用程序时请求pipe理权限?
将以下内容添加到清单文件中:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
您也可以使用highestAvailable
级别。
在这里看看有关embedded清单文件:
http://msdn.microsoft.com/en-us/library/bb756929.aspx
PS:如果你没有清单文件,你可以很容易地添加一个新的:
在Visual Studio中,右键单击项目 – >添加项目 – >select应用程序清单文件(在Visual C#项目常规下)
添加的文件已经有了上面的部分,只需从asInvoker
中将level更改为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
标记:
对于F#Visual Studio 2013,包括使用FSharp编译器的/win32manifest
标志请求pipe理员提升的清单文件,如下所示。 所以,给定一个名为“App.Exe”的项目输出
-
创build一个带有以下内容的文件(为了方便起见,可以将文件添加到项目中,确保它的
Build Action
是None' and
复制到输出…is
不要复制的. By convention such a file is named
App.Exe。如果你需要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>
-
编辑项目对话生成面板的
Other flags:
input字段以包含以下内容:/win32manifest:<ApplicationManifestFile>
。 例如,在这种情况下,//win32manifest:App.Exe.manifest
。