将可执行文件重命名为game.exe会导致运行时出现15秒延迟 – STRANGE问题

这震动了我对计算机和操作系统的理解,使我感到非常不安。 我刚刚花了大约一个小时进入编译命令的不同迭代g++ ,在我的愤怒我重命名的可执行文件从game.exe延迟到gameg.exe ,突然间问题消失了。

这里有一些更多的背景知识:我最近注意到,当我运行Eclipseunit testing版本时,当我开始使用SDL启用的testing时,它将打开SDL窗口并冻结约20秒,然后才能开始testing。 在随后的testing中(调用SDL_Quit()并将SDL重新初始化为testing过程的一部分),此延迟不存在。 现在我已经确定只有当可执行文件被命名为“game.exe”时才会发生这种情况! 我将其重命名为任何其他文件名,并且顺利地运行testing,像通常那样在一秒之内初始化SDL系统。 我曾经假设,必须有某种错误,导致我的Eclipse构build具有这种行为,这是不存在的生成文件构build,但事实certificate,如果我采取eclipse构build并重命名其可执行文件(项目文件夹它在被称为game因此game.exe )它不performance出行为。

同样,我把我的makefile构build(其文件名是entropy_unittest_disp.exe fyi)并将其重命名为game.exe ,并开始执行此操作。 我把它重命名为game ,它也是这样做的(我从mingw的bash运行..当不与.exe扩展名,浏览器不知道它是一个可执行文件)。 但是我把它改成了game.exx ,它工作正常。

什么是黑魔法? 为什么一个程序的function不同取决于它的文件名? 我查询argv [0],我实际上做它打印来控制它的价值(出于debugging的目的),但毫不奇怪,它只是打印程序及其path。 我的程序中没有执行任何逻辑。

我试图运行GDB来查找它冻结的地方,但是一旦我按下Ctrl + C GDB就退出了。

有没有人知道这可能是由什么造成的? 病毒?

编辑:我从这个网站下载了这个演示: http : //www.sdltutorials.com/sdl-opengl-tutorial-basics/

提取它,重命名文件到game.exe,和烨,同样的事情发生。 这是什么? 接下来我将尝试运行dependency walker,看是否有东西试图挂钩它。

我假设你有一个AMD(ATI)或Nvidia显卡与他们的官方驱动程序。

机会是,game.exe是发布的实际游戏的可执行文件名称,并且您的驱动程序正在针对“游戏”或为此游戏加载Crossfire或SLI配置文件进行特殊优化。 一个快速的Google搜索似乎告诉我Resident Evil 4称他们的可执行文件为“game.exe”。

我建议看看这个链接进一步的细节,可能会发生什么:

http://www.kn00tcn.net/site/ati-catalyst-profiles/

不知道如何回复史蒂芬评论顶部的答案,但关于驱动程序配置文件,这只是一个基本的蛮力检查.exe文件名

一些游戏保证在一个特定的子文件夹中,所以驱动程序会查找exe文件所在的位置,比如'\ team fortress 2 \ hl2.exe'

但由于大多数游戏可以让你选择你正在安装的文件夹的名称,以及很多时间在同一个根文件夹的exe,驱动程序别无选择,只能盲目地认为gameX.exe将是gameX

一个好的“副作用”是你可以在任何游戏上强制其他游戏配置文件进行故障排除,或尝试启用CF / SLI缩放

所以请务必确保您的可执行文件具有原始名称,以确保gfx驱动程序不会尝试运行专为其他游戏设置的“优化”

这可能是由于您的操作系统上运行的反病毒软件? 某些文件通常用于病毒“Game.exe”可能是其中之一,因此OS / AV的额外照顾,以确保它是安全的

在没有任何额外的软件安装的情况下测试它,如果它工作正常,那么也许你有一些保护软件,如防病毒或沙箱,…,如果你有任何这种软件禁用它们,并再次测试

检查是否在图像文件执行选项注册表项HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options列出game.exe。 它可以用来启动特定的程序,作为具有特定名称的应用程序的调试器。 ( 有关图像文件执行选项的更多信息 )

由于AppCompat Shimming的原因,EXE的行为会有所不同。 检查加载的模块列表,看看是否有一堆以“ac”开头的DLL加载到你的应用程序中。