У меня есть публичные машины, которые мне нужны для запуска сценариев выхода из системы на Perl. Я хочу, чтобы скрипт запускался для обычного пользователя. Похоже, что UAC блокирует это. Итак, я переключил уровень UAC, чтобы "никогда не уведомлять", что, кажется, отключает UAC. Но все еще нет игры в кости. Эти скрипты должны быть запущены при выходе!
2 ответа
Из вашего описания кажется, что для выполнения скрипта требуются права администратора. Если сценарий не запущен из процесса с токеном администратора, вам будет предложено через UAC повысить ваши привилегии.
Вы можете обойти это ограничение с помощью простой службы Windows, которая работает как пользователь LOCAL SYSTEM и реализует метод OnCustomCommand().
Из сценария выхода из системы есть исполняемый файл, который вызывает метод ExecuteCommand(), передавая предопределенный тип int, который будет служить триггером для службы для выполнения команд, требующих прав администратора.
private enum CustomCommands { RunAsAdmin = 128 };
ServiceController srvc = new ServiceController("SimpleService");
srvc.ExecuteCommand((int)CustomCommands.RunAsAdmin);
UAC заблокирует программы, которым нужен доступ администратора.
Если ваши perl-скрипты запрашивают повышение прав, то для обычного пользователя, даже если UAC выключен, Windows запросит доступ администратора (поведение, аналогичное Windows XP).
Что делает скрипт выхода? Если ему нужно запустить что-то, требующее прав администратора, вам может потребоваться написать запланированное задание или службу Windows, которая запускается в учетной записи администратора, чтобы сделать это за вас.