Wie kann ich den Kompatibilitätsmodus für eine ausführbare Datei über die Befehlszeile festlegen?

20

Gibt es eine Möglichkeit, die Kompatibilität mit XP-Option (Rechtsklick / Eigenschaften / Kompatibilität ... Ja :) auf eine ausführbare Datei über die Befehlszeile festzulegen?

Oder noch besser: Gibt es eine Möglichkeit, die Kompatibilität für ein ganzes Verzeichnis (ausführbare Dateien im Verzeichnis) festzulegen, sodass auf jeder ausführbaren Datei, die kompiliert / erstellt wird, bereits dieses "Flag" angegeben ist?

Turm
quelle
1
@CodyGray - Da ich eine alte Compiler-IDE (von Win95) verwende; Ein Wechsel zu einem neuen würde einige Kosten verursachen, auf die wir derzeit nicht vorbereitet sind. Wenn ich es erstelle und von der IDE starte, stürzt das Ganze ab. Wenn ich die Kompatibilität stelle und sie vom Explorer aus starte, funktioniert sie. Das ist gut genug für mich. Ich mag es nur nicht, jedes Mal nach dem Build ein Kompatibilitäts-Flag zu setzen. Daher die Frage ... :)
Rook
1
@CodyGray - Nun, ich könnte Ihnen die ganze Geschichte erzählen, aber ich bezweifle, dass sie hier (oder in drei Fällen) in das Kommentarfeld passt, also lasse ich die Frage einfach noch eine Weile offen ...
Rook,
1
Ah, ich wusste, dass ich mich daran erinnerte, das in einem Artikel gelesen zu haben. Ich habe es endlich gefunden und eine Antwort für die Nachwelt gepostet. :-) Zögern Sie nicht, meine Nörgelei zu ignorieren, aber ich bezweifle ernsthaft, dass Sie einen alternativen Ansatz finden werden.
Cody Grey

Antworten:

28

Ich kenne keine Tools, mit denen die Anwendungskompatibilitätsflags gesetzt oder geändert werden können.

Die Anwendungskompatibilitätsflags werden jedoch in der Registrierung (Benutzer oder Systemteil) gespeichert:

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers

Daher können Sie den Standard-Befehlszeilen-Registrierungseditor zum Erstellen des erforderlichen Eintrags verwenden:

reg.exe Add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "C:\Program Files\MyApp\Test.exe" /d "WINXPSP3"

Weitere Informationen zu den verfügbaren Flags finden Sie im Blog-Beitrag Ausführen einer Anwendung als Administrator oder im Kompatibilitätsmodus .

Robert
quelle
1
Hmm, das könnte (!) Funktionieren ... diese dritte Zeile "reg.exe ...". Wenn ich sie also für jede Exe in einem Verzeichnis einstelle, bleibt sie sogar an diese ausführbare Datei gebunden ob es wieder aufgebaut wird?
Turm
2
Das normale Verhalten von Rechtsklick> Eigenschaften> Kompatibilität ist das Festlegen der Schlüssel unter HKCU, sofern nicht die Schaltfläche "Einstellungen für alle Benutzer ändern" gedrückt wird. Dann wird es unter HKLM für alle Benutzer eingestellt und kann nicht über den Dialog geändert werden.
Mike Brown
11

Roberts Antwort war genau richtig. Um es ein wenig zu erweitern und die Frage des OP über das Einstellen des Modus in Massen zu beantworten ...

Wenn Sie einen Ordner voller EXE-Dateien haben, können Sie dies tun:

for %x in ("*.exe") do reg.exe Add "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "%~fx" /d "WINXPSP3"

In diesem Beispiel wird HKCU anstelle von HKLM verwendet. Wählen Sie auf jeden Fall das aus, das Sie wirklich möchten.

So entfernen Sie die Einstellungen mit jeweils einer Bestätigungsaufforderung:

for %x in ("*.exe") do reg.exe Delete "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "%~fx"

Fügen Sie /fam Ende hinzu, wenn Sie nicht zur Bestätigung aufgefordert werden möchten.

(Wenn Sie diese Antwort positiv bewerten, stimmen Sie bitte auch für Roberts!)

Mike Brown
quelle