Разрешения servicecontroller

Я написал службу, которую веб-сайт может выполнить удаленно с помощью метода ExecuteCommand. Я заметил, что если веб-сайт не работает под пользователем, который является администратором на удаленном компьютере, тогда я получаю исключение, исключенное из разрешения, при попытке выполнить команду.

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

Ответ 1

Вам придется временно выдать себя за пользователя-администратора для текущего потока, а затем вернуться обратно. Посмотрите WindowsIdentity.Impersonate() в MSDN.

ServiceController будет использовать текущего директора потоков, чтобы вызвать диспетчер управления реестром и диспетчером управления, и вы должны убедиться, что он настроен на пользователя-администратора, если вы хотите управлять сервисами. Недостатком является то, что вам нужно будет хранить пароль где-то в учетной записи, убедитесь, что вы используете SecureString и не сохраняете пароль в обычном режиме -text.