Переименование программы или ее рабочего каталога меняет поведение?

209
user78571

Это определенно самая странная ошибка, с которой я долго бился головой ...

У меня очень простой .exe на Windows 10, который я скомпилировал сам, используя MSVC и библиотеку Allegro (которая использует DirectX). Источник ниже на случай, если детали как-то важны, но суть:

  • DirectDraw выдает ошибку времени выполнения, когда я запускаю код.
  • Если я переименую исполняемый файл, ошибка исчезнет, ​​и программа будет успешно выполнена.
  • Если я переместу исполняемый файл в другую папку или переименую папку, программа запустится успешно.
  • Если я переименую исполняемый файл / папку обратно в исходные имена, ошибка вернется.

В папке нет других файлов. Единственное, о чем я могу думать, это то, что Windows каким-то образом ищет абсолютный путь к исполняемому файлу и ведет себя по-разному в зависимости от этого значения (кеширует некоторую информацию о совместимости?)

Есть идеи, что происходит? На практике я могу просто переименовать исполняемый файл и продолжить свой день, но теперь мне действительно интересно, почему происходит такое поведение ...

PS: код точно такой, используя библиотеку Allegro 4.4.

#include "allegro.h" int main(int argc, char **argv) { allegro_init(); set_color_depth(8); set_gfx_mode(GFX_AUTODETECT_FULLSCREEN, 640, 480, 0, 0); exit(0); } END_OF_MAIN() 

Когда я запускаю код, я получаю сообщение об ошибке (E_NOIMPL) при попытке установить режим видео.

0
Как называется исполняемый файл, когда он вызывает проблемы? Mokubai 7 лет назад 1
@Mokubai "alleg_test.exe" user78571 7 лет назад 0
@ Теперь, когда ты потратил время, чтобы отредактировать и опровергнуть мой вопрос из-за тривиальности, возможно, я мог бы попросить тебя о какой-то профессиональной помощи или совете? user78571 7 лет назад 0

1 ответ на вопрос

0
wendy.krieger

Вы должны знать, что windows хранит полный путь к программе в реестре или на рабочем столе. Если вы переставляете имя программы или каталог, вам нужно искать в реестре название программы.

Одно место, на которое стоит обратить внимание, - это приложение APPPATHS, где вы можете создавать ярлыки для нужной программы. Вы делаете копию write.exe и заменяете строку в ней (wordpad.exe) на имя, которое не используется (например, zdirectx.exe), и создаете запись в реестре apppath, которая будет запускаться directx.exeпри вызове zdirectx.exe. Затем вы можете также вызвать свою программу directx.exe.

Я использую эту технику, чтобы перемещать многие программные компоненты по пути, сохраняя доступность программы.