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