Переименование исполняемого файла в game.exe приводит к задержке в 15 секунд при запуске - странная проблема - PullRequest
3 голосов
/ 04 сентября 2011

Это потрясает мое понимание компьютеров и операционных систем на уровне, который делает меня очень неловким. Я только что потратил около часа, вводя различные итерации команд компиляции в g++, и в своем раздражении я переименовал исполняемый файл, который имел задержку от game.exe до gameg.exe, и внезапно проблема исчезла.

Вот еще немного предыстории: я недавно заметил, что когда я запускал сборку модульного теста Eclipse, когда я начинал с теста с поддержкой SDL, он открывал окно SDL и зависал примерно на 20 секунд, прежде чем можно было начать тест. , В последующих тестах (которые вызывают SDL_Quit() и повторно инициализируют SDL как часть процесса тестирования) эта задержка отсутствует. Теперь я убедился, что ТОЛЬКО когда исполняемый файл называется точно "game.exe", это происходит! Я переименую его в любое другое имя файла, и он успешно запускает тесты, инициализируя систему SDL за секунду, как обычно. Ранее я предполагал, что должна быть какая-то ошибка, из-за которой моя сборка Eclipse имела такое поведение, которого не было в сборке makefile, но оказывается, что я беру сборку eclipse и переименовываю ее исполняемый файл (папка проекта он называется game, следовательно game.exe), он не демонстрирует поведение.

Аналогично, я беру свою сборку make-файла (имя которой entropy_unittest_disp.exe fyi) и переименовываю ее в game.exe, и она начинает это делать. Я переименовываю его в game, и он тоже делает это (я запускаю из bash mingw .. когда нет расширения .exe, проводник не знает, что это исполняемый файл). Однако я изменил его на game.exx, и он работал нормально.

ЧТО ЭТО ЧЕРНАЯ МАГИЯ? Почему программа должна работать по-разному в зависимости от имени файла ??? Я делаю запрос argv [0] и фактически делаю это, чтобы вывести на консоль его значение (для целей отладки), но неудивительно, что он просто печатает программу и ее путь. Никакая логика никогда не выполняется в моей программе.

Я пытался запустить GDB, чтобы выяснить, где он зависает, но как только я нажимаю Ctrl + C, GDB просто завершается.

Кто-нибудь знает, чем это может быть вызвано? Вирус?

редактировать: я скачал эту демонстрацию с этого сайта: http://www.sdltutorials.com/sdl-opengl-tutorial-basics/

извлек его, переименовал файл в game.exe, и да, происходит то же самое. ЧТО ЭТО? Я собираюсь попробовать запустить обходчик зависимостей, чтобы посмотреть, не пытается ли что-то зацепиться за него.

Ответы [ 6 ]

11 голосов
/ 04 сентября 2011

Я предполагаю, что у вас есть видеокарта AMD (ATI) или Nvidia с их официальными драйверами.

Скорее всего, game.exe - это имя исполняемого файла для текущей выпущенной игры, и ваши драйверы запускают специальные оптимизации для "игры" или загружают профили Crossfire или SLI для этой игры. Быстрый поиск в Google, кажется, говорит мне, что Resident Evil 4 называет свой исполняемый файл «game.exe».

Я рекомендую взглянуть на эту ссылку для получения более подробной информации о том, что может происходить:

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

2 голосов
/ 05 сентября 2011

не знаю, как ответить на комментарий Стивена к верхнему ответу, но в отношении профилей драйверов, это просто базовая проверка файловых имен .exe

, некоторые игры гарантированно находятся в определенной подпапке,поэтому драйвер ищет , где находится исполняемый файл, например '\ team fortress 2 \ hl2.exe'

, но так как большинство игр позволяют вам выбрать, какое имя папки вы устанавливаете, и большую часть времени, когда исполняемый файл находится в той же корневой папке, у драйверов нет иного выбора, кроме как слепо предполагать, что gameX.exe будет gameX

хороший «побочный эффект» этого - вы можетепринудительно заставлять другие игровые профили в любой игре в целях устранения неполадок или пытаться включить масштабирование CF / SLI

, поэтому всегда старайтесь убедиться, что исполняемый файл имеет оригинальное имя, чтобы знать, что драйвер gfx не пытается запустить 'оптимизации сделаны исключительно для других игр

1 голос
/ 04 сентября 2011

Протестируйте его в чистых окнах, без какой-либо дополнительной установки программного обеспечения, если оно работает нормально, то, возможно, у вас есть какое-нибудь защитное программное обеспечение, такое как Антивирус или песочница, ..., если у вас есть какое-либо из этого программного обеспечения, отключите их и протестируйте еще раз

1 голос
/ 04 сентября 2011

Может ли это быть из-за антивирусного программного обеспечения, работающего на вашей ОС?Некоторые файлы, которые обычно используются в вирусе «Game.exe», могут быть одним из них, и, следовательно, дополнительные меры предосторожности от OS / AV для обеспечения безопасности

0 голосов
/ 04 сентября 2011

EXE будет вести себя по-разному в зависимости от его имени из-за AppCompat Shimming. Проверьте список загруженных модулей и посмотрите, есть ли в вашем приложении несколько библиотек DLL, начинающихся с «ac».

0 голосов
/ 04 сентября 2011

Проверьте, указан ли game.exe в разделе реестра параметров выполнения файла изображения HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options.Его можно использовать для запуска определенной программы в качестве отладчика для приложения с определенным именем.( Подробнее о параметрах выполнения файла изображения )

...