Что на самом деле делает __COMPAT_LAYER?
Недавно я пытался предоставить права администратора приложения без запроса системы "Хотите предоставить права администратора?" и я нашел способ, который работает отлично.
Решение, которое я нашел
Я создал файл bat с именем nonadmin.bat и написал в нем приведенный ниже код
cmd min C set __COMPAT_LAYER=RunAsInvoker && start %1
и если мы перетаскиваем на него какой-нибудь exe-файл, он дает им права администратора (до этого он не разрешал мне обращаться к переменным окружения без него, но после перетаскивания файла на летучую мышь он работал).
Вопрос
Теперь мой вопрос:
- Что на самом деле означает __COMPAT_LAYER и что оно делает?
- Как мне удалить такую вещь, чтобы она снова запрашивала права администратора?
- Это снижает безопасность системы?
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=
,
Поскольку вы устанавливаете переменную с помощью пакетного сценария, переменная автоматически сбрасывается, когда исполняемый файл, на который вы перетаскиваете ее, завершается и сценарий закрывается. Важно отметить, что настройки переменных сохраняются для любых дочерних процессов, которые порождаются выбранным вами исполняемым файлом.
Безопасность использования __COMPAT_LAYER
Установка __COMPAT_LAYER для RunAsInvoker фактически не дает вам привилегий администратора, если у вас их нет; он просто предотвращает появление всплывающего окна UAC, а затем запускает программу так, как ее назвал пользователь. Таким образом, это безопасно использовать, так как вы волшебным образом не получаете прав администратора.
Вы также можете установить для переменной RunAsHighest (только UAC активирует, если у вас есть права администратора, но также не предоставляет права администратора, если у вас их нет) или RunAsAdmin (всегда активирует UAC).