这使我对计算机和操作系统的理解让我感到非常不安。我花了大约一个小时进入编译命令的不同迭代到g++
,在我的愤怒中,我重命名了可执行文件,该文件从game.exe
延迟到gameg.exe
并且突然之间问题消失了。
这里有更多背景知识:我最近注意到,当我运行Eclipse单元测试版本时,当我开始启用SDL测试时,它将打开SDL窗口并冻结大约20秒,然后才能开始测试。在后续测试(调用SDL_Quit()
并重新初始化SDL作为测试过程的一部分)中,此延迟不存在。现在我确定只有当可执行文件被命名为“game.exe”才会发生这种情况!我将它重命名为任何其他文件名,它会愉快地运行测试,在一秒钟内像通常那样初始化SDL系统。之前我曾假设必然会有某种错误导致我的Eclipse构建产生这种行为,这在makefile构建中并不存在,但事实证明,如果我采用eclipse构建并重命名其可执行文件(项目文件夹)它被称为game
,因此game.exe
)它没有表现出这种行为。
同样,我将我的makefile构建(其文件名为entropy_unittest_disp.exe
fyi)并将其重命名为game.exe
,然后它开始执行此操作。我将它重命名为game
并且它也执行它(我从mingw的bash运行...当没有.exe
扩展时,资源管理器不知道它是可执行文件)。但是我将其更改为game.exx
并且它正常工作。
这是什么黑魔法?为什么程序的功能会根据文件名的不同而不同?我查询argv [0],我实际上是打印到控制它的值(出于调试目的),但不出所料它只是打印程序及其路径。我的程序中没有逻辑执行。
我试图运行GDB以找出冻结的位置但是一旦我按下Ctrl + C GDB就会退出。
有没有人知道这可能是由什么引起的?病毒?
编辑:我从此网站下载了此演示:http://www.sdltutorials.com/sdl-opengl-tutorial-basics/
提取它,将文件重命名为game.exe,并且是的,同样的事情发生了。这是什么?我将尝试在旁边运行依赖性walker,看看是否有东西试图挂钩。
答案 0 :(得分:11)
我假设您有官方驱动程序的AMD(ATI)或Nvidia显卡。
有可能,game.exe是发布的实际游戏的可执行名称,并且您的驱动程序正在为“游戏”运行特殊优化或为此游戏加载Crossfire或SLI配置文件。一个快速的谷歌搜索似乎告诉我,生化危机4调用他们的可执行文件“game.exe。”
我建议您查看此链接,了解可能发生的更多详情:
答案 1 :(得分:2)
不确定如何回答史蒂文对最佳答案的评论,但对于驱动程序配置文件,它只是对.exe文件名的基本暴力检查
某些游戏保证位于特定的子文件夹中,因此驱动程序会查找exe所在的 ,例如'\ team fortress 2 \ hl2.exe'
但是,由于大多数游戏都允许您选择要安装的文件夹名称,&很多时候exe都在同一个根文件夹中,驱动程序别无选择,只能盲目地假设gameX.exe将成为gameX
一个很好的'副作用'是你可以在任何游戏上强制其他游戏配置文件进行故障排除,或尝试启用CF / SLI缩放
因此,请务必确保您的可执行文件具有原始名称,以确保gfx驱动程序不会尝试运行专门针对其他游戏的“优化”
答案 2 :(得分:1)
这可能是因为您的操作系统上运行了防病毒软件吗? Virus“Game.exe”中常用的某些文件可能是其中之一,因此OS / AV需要额外注意,以确保它是安全的
答案 3 :(得分:1)
在干净的窗口中测试它,没有任何额外的软件安装,如果它工作正常,那么也许你有一些保护软件,如防病毒或沙箱,......,如果你有任何这个软件禁用它们,并测试再次
答案 4 :(得分:0)
检查图像文件执行选项注册表项HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
中是否列出了game.exe。它可用于将特定程序作为具有特定名称的应用程序的调试器启动。 (More info on Image File Execution Options)
答案 5 :(得分:0)
由于AppCompat Shimming,EXE的名称会因其名称而有所不同。检查加载的模块列表,看看是否有一堆DLL以“ac”开头加载到您的应用程序中。