3

前段时间我开发了一个视频游戏,当时 WinXP 是当前的 Windows 版本。游戏需要在系统中安装自己的字体,如果它不存在的话。我不记得我在代码中是如何做到这一点的,我想我要么使用了特定的 WinAPI 函数,要么只是将字体文件复制到了 Fonts 文件夹中——无论哪种方式,当时都可以正常工作。

但是,现在有人在Win7上运行游戏时,除非用户以管理员身份运行,否则游戏无法安装字体。游戏可以运行,但使用了可怕的默认字体,因此用户甚至没有意识到有问题,只是认为游戏看起来很糟糕。

所以我需要的是使 exe 文件始终要求以管理员身份运行。我可以重新编译游戏并设置构建,以便 exe 文件始终需要管理员权限,但我没有一些我已经使用过的 SDK,因此重建可能会有些困难。

所以我想做的是:我可以以某种方式简单地修改 .exe 文件,而不需要源代码,以便它始终要求以管理员身份运行吗?

我发现我需要把它放在清单中:

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

但我可以编辑 exe 文件的清单吗?我已经尝试过使用资源的 XN 资源编辑器,但它似乎无法编辑清单。

是否有可能做到这一点?

谢谢。

4

1 回答 1

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>
于 2012-07-24T18:17:39.580 回答