如何修改exe文件以强制它在没有源代码的情况下以管理员身份启动

时间:2012-07-24 18:07:09

标签: windows manifest administrator

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

然而,当有人在Win7上运行游戏时,除非用户以管理员身份运行,否则游戏无法安装该字体。游戏有效,但使用了可怕的默认字体,结果用户甚至没有意识到出错了,只是认为游戏看起来很糟糕。

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

所以我想做的是:我可以在没有源代码的情况下以某种方式简单地修改.exe文件,以便总是要求以管理员身份运行吗?

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

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

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

有可能这样做吗?

感谢。

1 个答案:

答案 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>