我的安装程序部署了一个配置exe,用于在已安装的Windows服务上进行一些基本配置。 exe还需要创建和编写一些注册表项。在Windows Server 2008环境中,无法创建这些密钥。我已经调查并发现这是一个管理员权限,并且exe没有提示在2008年UAC下需要的管理员权限。我可以通过右键单击exe并以管理员身份运行来解决此问题。这不是理想的,因为它需要通知我们的客户表演的额外步骤。运行exe时还有其他提升管理员权限的方法吗?
答案 0 :(得分:1)
在exe上或与exe一起放置清单。如果您让我知道您正在使用的版本,我可以告诉您如何使用Visual Studio嵌入清单。如果您没有使用Visual Studio,或者您没有构建exe,那么您可以将清单文件放在与exe相同的文件夹中,这也可以。在这种情况下,文件的名称必须与您的exe相同,最后使用.manifest,例如对于foo.exe,它是foo.exe.manifest。内容应如下所示:
<?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="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC Manifest Options
If you want to change the Windows User Account Control level replace the
requestedExecutionLevel node with one of the following.
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
If you want to utilize File and Registry Virtualization for backward
compatibility then delete the requestedExecutionLevel node.
-->
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
</asmv1:assembly>
请注意,requestExecutionLevel的可能值都在注释中,并且这个值使用requireAdministrator。现在它将永远提升,因此为你工作。