Как установить режим совместимости для исполняемого файла из командной строки?

21

Есть ли способ установить параметр совместимости с XP (щелчок правой кнопкой мыши / свойства / совместимость ... что да, :) для исполняемого файла из командной строки?

Или, что еще лучше, есть ли способ установить совместимость для всего каталога (исполняемых файлов в каталоге), чтобы каждый исполняемый файл, который компилируется / собирается, уже имеет этот «флаг»?

ладья
источник
1
@CodyGray - потому что я использую старую IDE компилятора (из Win95); переход на новый вызовет некоторые расходы, к которым мы сейчас не готовы. Если я собираю его и запускаю из среды IDE, все происходит сбой. Если я ставлю совместимость и запускаю ее из проводника, это работает. Что достаточно хорошо для меня. Только мне не нравится ставить флаг совместимости каждый раз после сборки. Поэтому вопрос ... :)
Ладья
1
@CodyGray - Ну, я мог бы рассказать вам всю историю, но я сомневаюсь, что она поместится здесь в поле для комментариев (или в трех из них), поэтому я просто оставлю вопрос открытым еще ненадолго ...
Ладья
1
Ах, я знал, что вспомнил, что читал это в статье. Я наконец нашел это и отправил ответ для потомков. :-) Не стесняйтесь игнорировать мое нытье, но я серьезно сомневаюсь, что вы найдете альтернативный подход.
Коди Грей

Ответы:

29

Я не знаю инструментов, позволяющих устанавливать или изменять флаги совместимости приложений.

Однако флаги совместимости приложения хранятся в реестре (пользовательская или системная часть):

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

Поэтому вы можете использовать стандартный редактор реестра командной строки для создания необходимой записи:

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

Подробнее о доступных флагах см. В блоге « Запуск приложения от имени администратора» или «Режим совместимости» .

Роберт
источник
1
Хм, это может (!) Сработать ... эта третья строка "reg.exe ..." ... поэтому, если я установлю ее для каждого exe-файла, который у меня есть в каком-либо каталоге, он будет "оставаться подключенным" к этому исполняемому файлу даже если это восстановить?
Ладья
2
Обычное поведение щелчка правой кнопкой мыши> Свойства> Совместимость - установка ключей в HKCU, если не нажата кнопка «Изменить настройки для всех пользователей». Затем он устанавливается в HKLM для всех пользователей и не может быть изменен через диалог.
Майк Браун
17

В командном файле используйте:

> set __COMPAT_LAYER=WinXP

перед вызовом .exe

Видеть:

user285687
источник
3
+1 Запуск .exe через .bat кажется наименее инвазивным решением
Wolf
11

Ответ Роберта был точным. Чтобы немного рассказать об этом, и ответить на вопрос ОП о массовом режиме настройки ...

Если у вас есть папка с файлами .exe для обработки, вы можете сделать это:

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

Этот пример использует HKCU вместо HKLM; не забудьте выбрать тот, который вы действительно хотите.

Чтобы удалить настройки, с запросом подтверждения для каждого:

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

Добавьте /fв конец, если вы не хотите получать запрос на подтверждение.

(Если вы проголосуете за этот ответ, пожалуйста, проголосуйте и за Роберта!)

Майк Браун
источник