Как установить службу Windows, которая запускается как администратор?
-
04-10-2019 - |
Вопрос
Я написал установщик, который устанавливает службу Windows (A), которая должна запускаться / остановить другую услугу (B). Однако, когда попытка начать / остановить B, я получаю это исключение:
System.invalidOperationException: не может открыть службу MyService на компьютере ». '. ---> System.comPonentModel.Win32Exception: доступ запрещен
Установщик устанавливает службу в качестве локального обслуживания, и она запрашивает права администратора через всплывающую всплывающую связь, которую я предоставляю. Я также добавил файл app.manifest на службу, который установлен для запроса прав администратора:
Тем не менее, я все еще получаю эту ошибку.
Вот как я начинаю службу (остановка одинакова, кроме его вызовов STOP, конечно):
using (Mutex mutex = new Mutex(false, "MyServiceLock"))
{
mutex.WaitOne();
if (ServiceExists(serviceName) == true)
{
using (ServiceController serviceController = new ServiceController(serviceName, "."))
{
serviceController.Start(); // this line throws the exception
}
}
mutex.ReleaseMutex();
}
Почему может получить доступ к этой услуге?
Решение
Сервис не может задать высоту UAC. Звучит мне, что uac Proment вы описываете, на самом деле запрашиваются установщиком, а не услугой. Услуги обычно работают с очень привилегированным счетом уже, LocalSystem по умолчанию. Убедитесь, что вы настраиваете службу для использования такой привилегированной учетной записи, а не ограниченная учетная запись пользователя.
Другие советы
Как быстрый тест, если вы открыте services.msc
И проверьте свой сервер, чтобы «запустить как» и введите свои учетные данные, ошибка уходит? Может быть, в том, что Localservice не имеет доступа к остановке других услуг. Предоставление разрешения на uac быстрее, вероятно, только позволяло установить сервис в первую очередь, не говоря уже о том, чтобы работать как администратор.