Jak ustawić tryb zgodności dla pliku wykonywalnego z wiersza poleceń?

21

Czy istnieje sposób, aby ustawić zgodność z opcją XP (prawy przycisk myszy / właściwości / zgodność ... ten, tak :) do pliku wykonywalnego z wiersza poleceń?

Lub jeszcze lepiej, czy istnieje sposób na ustawienie zgodności dla całego katalogu (plików wykonywalnych w katalogu), aby każdy plik wykonywalny, który zostanie skompilowany / zbudowany, miał już na sobie tę „flagę”?

Wieża
źródło
1
@CodyGray - Ponieważ używam starego IDE kompilatora (z Win95); zmiana na nową spowodowałaby pewne koszty, na które obecnie nie jesteśmy przygotowani. Jeśli go zbuduję i uruchomię z IDE, wszystko się zawiesza. Jeśli ustawię kompatybilność i uruchomię ją w Eksploratorze, to zadziała. Co mi wystarczy. Tylko że nie lubię umieszczać flagi zgodności za każdym razem po kompilacji. Dlatego pytanie ... :)
Rook
1
@CodyGray - Cóż, mógłbym opowiedzieć całą historię, ale wątpię, by zmieściła się tutaj w polu komiksów (lub trzech z nich), więc zostawię pytanie na chwilę dłużej ...
Rook
1
Ach, wiedziałem, że pamiętam, że przeczytałem to w artykule. W końcu znalazłem i opublikowałem odpowiedź dla potomności. :-) Zapraszam do ignorowania moich dokuczliwych problemów, ale poważnie wątpię, czy znajdziesz alternatywne podejście.
Cody Gray

Odpowiedzi:

29

Nie znam narzędzi, które pozwalają ustawiać lub zmieniać flagi zgodności aplikacji.

Jednak flagi kompatybilne aplikacji są przechowywane w rejestrze (część użytkownika lub systemu):

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

Dlatego do utworzenia wymaganego wpisu możesz użyć standardowego edytora rejestru wiersza poleceń:

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

Więcej informacji na temat dostępnych flag znajduje się w poście na blogu Uruchamianie aplikacji jako administrator lub w trybie zgodności .

Robert
źródło
1
Hmm, to może po prostu (!) Działać ... ten trzeci wiersz „reg.exe ...” ... więc jeśli ustawię go dla każdego pliku exe, który mam w jakimś katalogu, pozostanie on „dołączony” nawet do tego pliku wykonywalnego jeśli jest odbudowany?
Wież
2
Normalne zachowanie kliknięcia prawym przyciskiem myszy> Właściwości> Zgodność polega na ustawianiu klawiszy w HKCU, chyba że zostanie naciśnięty przycisk „Zmień ustawienia dla wszystkich użytkowników”. Następnie jest ustawiany w HKLM dla wszystkich użytkowników i nie można go zmienić za pomocą okna dialogowego.
Mike Brown
11

Odpowiedź Roberta była natychmiastowa. Aby go nieco rozwinąć i odpowiedzieć na pytanie OP dotyczące masowego ustawiania trybu ...

Jeśli masz do przetworzenia folder pełen plików .exe, możesz to zrobić:

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

W tym przykładzie użyto HKCU zamiast HKLM; wybierz ten, który naprawdę chcesz.

Aby usunąć ustawienia, z monitem o potwierdzenie dla każdego:

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

Dodaj /fna końcu, jeśli nie chcesz otrzymywać monitów o potwierdzenie.

(Jeśli zagłosujesz na tę odpowiedź, zagłosuj również na Roberta!)

Mike Brown
źródło