Разрешения servicecontroller
Я написал службу, которую веб-сайт может выполнить удаленно с помощью метода ExecuteCommand. Я заметил, что если веб-сайт не работает под пользователем, который является администратором на удаленном компьютере, тогда я получаю исключение, исключенное из разрешения, при попытке выполнить команду.
Класс servicecontroller даже не позволяет вам указывать какие-либо параметры проверки подлинности. Это правильно? Есть ли какой-то набор пользовательских ресурсов, которые нужны пользователю, а не администратору, так как я неохотно добавляю всех пользователей веб-серверов в наш кластер в качестве локальных администраторов на служебной машине?
Ответы
Ответ 1
Вам придется временно выдать себя за пользователя-администратора для текущего потока, а затем вернуться обратно. Посмотрите WindowsIdentity.Impersonate() в MSDN.
ServiceController будет использовать текущего директора потоков, чтобы вызвать диспетчер управления реестром и диспетчером управления, и вы должны убедиться, что он настроен на пользователя-администратора, если вы хотите управлять сервисами. Недостатком является то, что вам нужно будет хранить пароль где-то в учетной записи, убедитесь, что вы используете SecureString и не сохраняете пароль в обычном режиме -text.