Meine Anwendung wird manchmal von einer Netzwerkfreigabe gestartet, und einige Kunden haben beim Ausführen der Anwendung eine externe Ausnahme C0000006 gemeldet. Laut meinen Google-Recherchen ist dieses "möglicherweise" damit verbunden, dass das Bild ausgelagert wird und das Laden aus dem Netzwerk fehlschlägt. Um dies zu umgehen, muss Windows die vollständige Image-Datei in den Swap laden und von dort aus ausführen, indem das Flag IMAGE_FILE_NET_RUN_FROM_SWAP
gesetzt wirdMeine Anwendung hängt auch von verschiedenen .bpl- und .dll-Bibliotheken ab, die zur Laufzeit geladen werden. Nur einige davon können von mir geändert werden, andere werden von anderen Anbietern geliefert. Was passiert mit diesen Bibliotheken, wenn die exe dieses Flag gesetzt hat? Werden die Dateien auch in die Auslagerungsdatei geladen oder werden sie bei Bedarf noch ausgelagert und neu geladen? Muss ich dieses Flag auch in die Bibliotheken aufnehmen?
Das Flag gilt nur für das PE-Modul, das es setzt. Das Festlegen des Flags in einem EXE bedeutet also nicht, dass Module, die von diesem EXE geladen werden, von dem Flag betroffen sind. Jedes Modul (DLL, Paket usw.), das von Ihrer EXE geladen wird, wird vom Loader gemäß den in diesem Modul angegebenen PE-Optionen behandelt.
Sie müssen also das PE-Flag für jedes Modul festlegen, das sich auf einer Netzwerkfreigabe befindet.
Für das, was es wert ist, würde ich empfehlen, auch IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP
hinzuzufügen.