前段时间我开发了一个视频游戏,当时WinXP是当前的Windows版本。如果游戏尚未存在,游戏需要将自己的字体安装到系统中。我不记得我在代码中究竟是怎么做到的,我想我要么使用特定的WinAPI函数,要么只是将字体文件复制到Fonts文件夹中 - 无论哪种方式,它当时都运行正常。
然而,当有人在Win7上运行游戏时,除非用户以管理员身份运行,否则游戏无法安装该字体。游戏有效,但使用了可怕的默认字体,结果用户甚至没有意识到出错了,只是认为游戏看起来很糟糕。
所以我需要的是让exe文件始终要求以管理员身份运行。我可以重新编译游戏并设置构建,以便exe文件总是要求管理员权限,但我没有一些我已经使用过的SDK,因此重建可能会有些困难。
所以我想做的是:我可以在没有源代码的情况下以某种方式简单地修改.exe文件,以便总是要求以管理员身份运行吗?
我发现我需要把它放在清单中:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
但是我可以编辑exe文件的清单吗?我曾经尝试过使用XN资源编辑器来处理资源,但似乎无法编辑清单。
有可能这样做吗?
感谢。
答案 0 :(得分:5)
您可以将清单创建为外部XML文件,并将其放在与可执行文件相同的文件夹中。将其命名为YourAppName.exe.manifest
(当然,将其替换为您的实际可执行文件名称),它应该像嵌入式资源一样工作。
外部文件的一个示例:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
type="win32"
name="YourApplication"
version="1.0.0.0"
processorArchitecture="*"/>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
publicKeyToken="6595b64144ccf1df"
language="*"
processorArchitecture="*"/>
</dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="requireAdministrator"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>