Ответ 1
__COMPAT_LAYER и как его использовать
__COMPAT_LAYER - это переменная системной среды, которая позволяет вам устанавливать уровни совместимости, которые можно настроить, когда вы щелкните правой кнопкой мыши на исполняемом файле, выберите "Свойства" и перейдите на вкладку "Совместимость".
В дополнение к тому, что вы знаете, есть несколько вариантов:
- 256Color - работает в 256 цветах
- 640x480 - работает в разрешении 640x480
- DisableThemes - отключает визуальные темы
- Win95 - запускает программу в режиме совместимости для Windows 95
- Win98 - запускает программу в режиме совместимости для Windows 98/ME
- Win2000 - запускает программу в режиме совместимости для Windows 2000
- NT4SP5 - запускает программу в режиме совместимости для Windows NT 4.0 SP5
Вы можете использовать несколько опций, разделив их на пробел: set __COMPAT_LAYER=Win98 640x480
Снятие переменной __COMPAT_LAYER
Эти параметры сохраняются до тех пор, пока существует переменная. Переменная останавливается, если либо командная строка, в которой была установлена переменная, закрыта, либо когда переменная вручную не установлена с set __COMPAT_LAYER=
команд set __COMPAT_LAYER=
.
Поскольку вы устанавливаете переменную с помощью пакетного скрипта, переменная автоматически отменяется после завершения исполняемого файла, который завершается, и скрипт закрывается. Важно отметить, что параметры переменной сохраняются для любых дочерних процессов, которые порождаются выбранным исполняемым файлом.
Безопасность использования __COMPAT_LAYER
Установка __COMPAT_LAYER на RunAsInvoker фактически не дает вам прав администратора, если у вас их нет; он просто препятствует появлению всплывающего окна UAC, а затем запускает программу, как любой пользователь ее вызывал. Таким образом, безопасно использовать это, так как вы не волшебным образом получаете права администратора.
Вы также можете установить переменную в RunAsHighest (только триггеры UAC, если у вас есть права администратора, но также не предоставляют права администратора, если у вас их нет) или RunAsAdmin (всегда запускает UAC).