Як я можу встановити режим сумісності для виконуваного з командного рядка?


21

Чи є спосіб встановити сумісність з опцією XP (клацання правою кнопкою миші / властивості / сумісність ... той, так :), щоб виконати з командного рядка?

Або ще краще, чи існує спосіб встановити сумісність із цілим каталогом (виконувані файли в каталозі), так що кожен виконуваний файл, який збирається / будує, вже має на ньому цей "прапор"?


1
@CodyGray - оскільки я використовую старий ID-компілятор (від Win95); перехід на новий призведе до певних витрат, до яких ми зараз не готові. Якщо я будую його і запускаю з IDE, вся справа руйнується. Якщо я ставлю сумісність і запускаю її від провідника, він працює. Що для мене досить добре. Тільки мені не подобається щоразу встановлювати прапор сумісності після збирання. Тому питання ... :)
Грак

1
@CodyGray - Ну, я міг би дати вам всю цю історію , але я сумніваюся , що це буде вписуватися в commments поле тут (або три з них), так що я буду просто залишити питання відкритим довше ...
тура

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

Побачити:


3
+1 Запуск .exe через .bat видається найменш інвазивним рішенням
Вовк

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до кінця, якщо ви не хочете, щоб вас вимагали підтвердження.

(Якщо ви проголосуєте за цю відповідь, будь ласка, проголосуйте і за Роберта!)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.