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

mzi*_*mzi 3 windows administrator manifest

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

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

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

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

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

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
Run Code Online (Sandbox Code Playgroud)

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

是否有可能做到这一点?

谢谢.

Ken*_*ite 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>
Run Code Online (Sandbox Code Playgroud)

  • 出于某种原因,简单地将清单文件放在同一个文件夹中并不适用于我的情况.但是,我注意到当我在XN资源编辑器中打开可执行文件时,我可以创建一个"Manifest"类型的新资源,当我以这种方式输入XML时,它可以很好地工作.谢谢. (2认同)