Я готовлю сценарий PowerShell для выполнения начальной настройки на некоторых узлах Windows 10. На одном из этапов настройки возникает проблема со старым программным обеспечением, запрашивающим административное повышение прав, которое ему не требуется. Это программное обеспечение не вызывается самим сценарием, но будет использоваться пользователями по мере необходимости. Решение требует, чтобы я установил флаг совместимости, заставляющий программу запускаться как вызывающий для всех пользователей - я пытаюсь найти способ реализовать это решение в сценарии конфигурации.
Для этого я могу добавить строковое значение в раздел реестра HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
. Имя строкового значения - это абсолютный путь к рассматриваемому исполняемому файлу, а его значение данных - ~ RUNASINVOKER
. Поместить это в сценарий Powershell - не проблема.
Проблема в том, что это само по себе не работает даже после перезапуска машины. Чтобы это вступило в силу, мне нужно щелкнуть правой кнопкой мыши исполняемый файл в проводнике и выбрать свойства, выбрать «Изменить настройки для всех пользователей» на вкладке совместимости, затем просто нажать «ОК» в новом диалоговом окне, не изменяя никаких настроек.
Кажется, что этот процесс что-то делает для обновления или инициализации моих настроек совместимости, но я не понимаю, что происходит, не говоря уже о том, как реализовать в сценарии PowerShell.
Добавлю, что этот процесс работает и в обратном направлении. Я могу добавить значение реестра после исправления «Изменить настройки для всех пользователей», и оно немедленно вступит в силу.
Кто-нибудь понимает, что происходит, чтобы мое добавление в реестр вступило в силу, и как я могу реализовать это в сценарии PowerShell?
Спасибо.
Я предполагаю, что запущенное программное обеспечение - это вызов для запуска файла .exe? Не могли бы вы попробовать эту строку НАД строкой, в которой работает ваше приложение?
set __COMPAT_LAYER=RunAsInvoker
Когда вы изменяете настройки, чтобы быть для всех пользователей, запись удаляется из
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
Если у вас есть ключ в обоих, я считаю, что текущий пользователь переопределяет локальный компьютер, и если они разные, это может работать не так, как ожидалось.