我使用Inno Setup生成应用程序安装程序。它成功安装了应用程序,但我只能以管理员身份运行它。由于我不希望用户右键单击exe文件并选择“以管理员身份运行”,我想知道是否有任何简单的方法授予应用程序本身管理员特权,或通过代码授予这些特权。 谢谢。
我使用Inno Setup生成应用程序安装程序。它成功安装了应用程序,但我只能以管理员身份运行它。由于我不希望用户右键单击exe文件并选择“以管理员身份运行”,我想知道是否有任何简单的方法授予应用程序本身管理员特权,或通过代码授予这些特权。 谢谢。
requestedExecutionLevel
值设置为requireAdministrator
。.manifest
文件扩展名的文本文件,并在其中放置以下XML:<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="MyAppAssemblyNameHere" type="win32"/>
<description>My App Description</description>
<!-- uncomment this to enable ComCtl v6 Visual Styles...
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/>
</dependentAssembly>
</dependency>
-->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
.rc
的文本文件,并让它引用.manifest
文件:1 24 "myapp.manifest"
brcc32.exe
将.rc
文件编译成.res
文件。brcc32 myapp.rc
.res
文件添加到您的项目中,并构建。
不直接可以。UAC 提升只会发生在进程启动时。一旦进程开始运行,就无法动态提升。但是,您可以执行以下操作之一:或者通过代码授予这些权限。
"runas"
动词调用 ShellExecute/Ex()
来启动另一个副本的应用程序,并附加一个额外的命令行参数(或单独的 .exe
),以根据需要运行您的管理逻辑。即使没有 UAC 清单,"runas"
将提升该进程。如果主应用程序需要等待管理员进程完成,则可以指定 SEE_MASK_NOCLOSEPROCESS
标志到 ShellExecuteEx()
,然后使用 WaitForSingleObject()
或相关函数等待返回的 HANDLE
,该句柄在启动的进程退出时将被发信号。.exe
不需要使用 requireAdministrator
清单,除非您真正需要整个应用程序以管理员权限运行。