我不久前开发了一个视频游戏,当时WinXP是当前的Windows版本.如果游戏尚未存在,游戏需要将自己的字体安装到系统中.我不记得我在代码中究竟是怎么做的,我想我要么使用特定的WinAPI函数,要么只是将字体文件复制到Fonts文件夹中 - 无论哪种方式,它当时都运行正常.
但是,当有人在Win7上运行游戏时,除非用户以管理员身份运行,否则游戏无法安装该字体.游戏有效,但使用了可怕的默认字体,结果用户甚至没有意识到出错了,只是认为游戏看起来很糟糕.
所以我需要的是使exe文件始终要求以管理员身份运行.我可以重新编译游戏并设置构建,以便exe文件总是要求管理员权限,但我没有一些我已经使用过的SDK,因此重建可能会有些困难.
所以我想做的是:我可以在没有源代码的情况下以某种方式简单地修改.exe文件,以便始终要求以管理员身份运行吗?
我发现我需要把它放在清单中:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
Run Code Online (Sandbox Code Playgroud)
但我可以编辑一个exe文件的清单吗?我曾经尝试过使用XN资源编辑器来处理资源,但似乎无法编辑清单.
是否有可能做到这一点?
谢谢.
我有一个Process 我想要的Kill; 然而,有时会产生InvalidOperationException说已经退出的过程.
为了防止异常,我试图检查进程是否退出:
if (!p.HasExited)
{
p.Kill();
}
Run Code Online (Sandbox Code Playgroud)
但是,我偶尔也会看到异常.由于该进程与我的代码并行运行,我认为问题可能基本上是竞争条件,即进程在检查和Kill()调用之间终止.
在不提出上述异常的情况下杀死进程的正确方法是什么?当然,我可以尝试 - 捕捉有问题的代码,但这似乎不是解决这个问题的最佳方法.
我可能忽略了一些简单的东西,但这让我很难过:为什么这个代码实际编译,至少在MS Visual Studio 2012中,即使<exception>不包括在内?它隐含地以某种方式包括在内吗?这在某种程度上与IDE有关吗?我应该包括它,为什么?
#include <iostream>
int main(int argc, char* args[])
{
try
{
throw std::exception("THIS HAS FAILED SPECTACULARLY");
}
catch (std::exception& e)
{
std::cout << "Exception occured:\n";
std::cout << e.what() << '\n';
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)