Установите приложение Win32 на RUNASINVOKER для всех пользователей

Я готовлю сценарий PowerShell для выполнения начальной настройки на некоторых хостах Windows 10. На одном из этапов настройки возникает проблема со старым программным обеспечением, запрашивающим административное повышение прав, которое ему не требуется. Это программное обеспечение не вызывается самим сценарием, но будет использоваться пользователями по мере необходимости. Решение требует, чтобы я установил флаг совместимости, заставляющий программу запускаться как вызывающий для всех пользователей - я пытаюсь найти способ реализовать это решение в сценарии конфигурации.

Для этого я могу добавить строку значение раздела реестра HKLM: \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ AppCompatFlags \ Layers . Имя строкового значения - это абсолютный путь к рассматриваемому исполняемому файлу, а его значение данных - ~ RUNASINVOKER . Поместить это в сценарий Powershell - не проблема.

Проблема в том, что это само по себе не работает, даже после перезапуска машины. Чтобы это вступило в силу, мне нужно щелкнуть правой кнопкой мыши исполняемый файл в проводнике и выбрать свойства, выбрать «Изменить настройки для всех пользователей» на вкладке совместимости, затем просто щелкнуть OK в новом диалоговом окне, не меняя никаких настроек.

Кажется, что этот процесс что-то делает для обновления или инициализации моих настроек совместимости, но я не понимаю, что происходит, не говоря уже о том, как реализовать в сценарии PowerShell.

Я должен добавить, что этот процесс также работает в обратном направлении. Я могу добавить значение реестра после исправления «Изменить настройки для всех пользователей», и оно вступит в силу немедленно.

Кто-нибудь понимает, что происходит, чтобы мое добавление в реестр вступило в силу, и как я могу реализовать это в PowerShell сценарий?

Спасибо.

2
задан 23 June 2017 в 11:11
2 ответа

Я предполагаю, что запущенное программное обеспечение - это вызов для запуска файла .exe? Не могли бы вы попробовать эту строку НАД строкой, в которой работает ваше приложение?

set __COMPAT_LAYER=RunAsInvoker
1
ответ дан 3 December 2019 в 12:36

Когда вы меняете настройки для всех пользователей, запись берется из

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

, а затем помещается в

HKEY_LOCAL_MACHINE\ SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers

или

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers

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

0
ответ дан 23 March 2020 в 18:45

Теги

Похожие вопросы