7

В последнее время я пытался дать свои права администратора приложений без системного запроса: «Вы хотите дать права администратора?» и я нашел способ, который отлично работает.Что на самом деле делает «__COMPAT_LAYER»?

Решение I Found

Я создал файл с именем битой nonadmin.bat и написал код, приведенный ниже в этом

cmd min C set __COMPAT_LAYER=RunAsInvoker && start %1 

и если мы перетащить любой ехе на него, он дает им права администратора (до того, как он не позволил мне получить доступ к переменным окружения без него, но после того, как он наложил файл на лету, он действительно сработал).

Вопрос

Теперь мой вопрос: -

  1. Что на самом деле означает '__COMPAT_LAYER' и что он делает?
  2. Как удалить такую ​​вещь, чтобы она снова запрашивала права администратора?
  3. Снижает ли безопасность системы?
+0

Он делает то, что говорит. Устанавливает параметры совместимости. Ваши примеры будут работать только для администраторов. Не администраторы ошибаются. –

+0

@Noodles вы можете уточнить и объяснить ответ этих трех вопросов. –

+4

Предположительно, что следует читать 'cmd/min/c ...'? – TripeHound

ответ

14

__COMPAT_LAYER, и как использовать его
__COMPAT_LAYER является системной переменной среды, которая позволяет установить уровни совместимости, которые являются параметры, которые можно настроить при нажатии правой кнопкой мыши на исполняемый файл, выберите Свойства, и перейдите на вкладку Совместимость.

Imgur

Есть several options to choose from в дополнение к тому, вы знаете о:

  • 256-цветные - Работает в 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, а затем runs the program as whatever user called it. Таким образом, безопасно использовать это, так как вы не волшебным образом получаете права администратора.

Вы также можете установить переменную в RunAsHighest (только триггеры UAC, если у вас есть права администратора, но также не предоставляют права администратора, если у вас их нет) или RunAsAdmin (всегда запускает UAC).

+0

Благодарим вас за подробное объяснение моего друга, но мне нужно знать 2 вещи. 1) Я прочитал, что это переменная среды, но всякий раз, когда я ищу ее в переменных среды, там нет такой вещи. 2) Как вы сказали, чтобы отменить это, мне нужно написать «set __COMPAT_LAYER =« ИЛИ »установить __COMPAT_LAYER = NULL», но когда я выполняю эти команды, приглашение UAC не появляется снова. Что я должен сделать, чтобы они снова появились? –

+0

Я не могу воспроизвести вашу проблему, но, как я сказал в своем последнем предложении, вы должны сказать «set __COMPAT_LAYER = RunAsAdmin» – SomethingDark

+0

@Agent_Spock: по умолчанию существуют переменные среды, некоторые из них существуют только в том случае, если вы их установили; это один из последних. Кроме того, если двойной щелчок на рассматриваемом исполняемом файле больше не вызывает приглашение UAC, это может указывать на то, что он не содержит манифестов, указывающих Windows, требуется ли это возвышение или нет. Когда это произойдет, Windows делает предположение. Поэтому, возможно, Windows заметила, что вы успешно запускали ее как не-админ, и решили последовать за пакетом. Во всяком случае, если вы не установили постоянную переменную среды в реестре или через панель управления, это не является причиной. –