Das Umbenennen des Programms oder seines Arbeitsverzeichnisses ändert das Verhalten?

306
user78571

Dies ist definitiv der seltsamste Fehler, gegen den ich meinen Kopf seit langem geschlagen habe ...

Ich habe eine extrem einfache .exe-Datei unter Windows 10, die ich mit MSVC und der Allegro-Bibliothek (die DirectX verwendet) selbst kompiliert habe. Die Quelle ist unten, falls die Details irgendwie wichtig sind, aber der Kernpunkt ist:

  • DirectDraw löst beim Ausführen des Codes einen Laufzeitfehler aus.
  • Wenn ich die ausführbare Datei umbenenne, wird der Fehler behoben und das Programm wird erfolgreich ausgeführt.
  • Wenn ich die ausführbare Datei in einen anderen Ordner verschiebe oder den Ordner umbenenne, wird das Programm erfolgreich ausgeführt.
  • Wenn ich die ausführbare Datei / den Ordner wieder in ihren ursprünglichen Namen umbenenne, wird der Fehler zurückgegeben.

Es gibt keine anderen Dateien im Ordner. Das einzige, was mir einfällt, ist, dass Windows irgendwie den absoluten Pfad der ausführbaren Datei nachschlägt und je nach Wert unterschiedlich ist (einige Kompatibilitätsinformationen zwischenspeichern?).

Irgendeine Idee, was los ist? In der Praxis kann ich die ausführbare Datei einfach umbenennen und meinem Tag nachgehen, aber jetzt bin ich wirklich neugierig, warum dieses Verhalten passiert ...

PS: Der Code ist mit der Allegro 4.4-Bibliothek genau der folgende.

#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() 

Beim Ausführen des Codes erhalte ich eine Fehlermeldung (E_NOIMPL), wenn ich versuche, den Videomodus einzustellen.

0
Wie heißt die ausführbare Datei, wenn sie Probleme verursacht? Mokubai vor 7 Jahren 1
@Mokubai "alleg_test.exe" user78571 vor 7 Jahren 0
@Dave jetzt, dass Sie sich die Zeit genommen haben, meine Frage über eine Kleinigkeit zu bearbeiten und abzustimmen. Vielleicht könnte ich Sie auch um professionelle Hilfe oder Rat bitten? user78571 vor 7 Jahren 0

1 Antwort auf die Frage

0
wendy.krieger

Sie sollten wissen, dass Windows den vollständigen Pfad zum Programm in der Registrierung oder auf dem Desktop speichert. Wenn Sie den Namen des Programms oder das Verzeichnis neu anordnen, müssen Sie in der Registrierung nach dem Namen des Programms suchen.

Ein interessanter Ort ist APPPATHS, an dem Sie Verknüpfungen zum gewünschten Programm erstellen können. Sie erstellen eine Kopie von write.exe und ersetzen die darin enthaltene Zeichenfolge (wordpad.exe) durch einen nicht verwendeten Namen (z. B. zdirectx.exe). Außerdem erstellen Sie einen Eintrag in der Registrierung von apppath, der directx.exebeim Aufruf gestartet wird zdirectx.exe. Sie können dann auch Ihr Programm aufrufen directx.exe.

Ich verwende diese Technik, um eine Menge von Programmmaterial aus dem Weg zu räumen, während das Programm weiterhin zugänglich bleibt.