У меня есть веб-приложение, написанное на C # mvc, которое пытается проверить статус службы Windows, остановлена она или запущена. Я написал код, но проблема в том, что код отлично работает на моей локальной машине разработчика, но при отправке на сервер код ошибки, указывающий, что доступ запрещен.
У меня такой код:
try
{
using (ServiceController sc = new ServiceController("Service"))
{
if (sc.Status == ServiceControllerStatus.Running)
{
//do something
}
}
}
catch (Exception ex) { };
}
Приведенный выше код продолжает давать сбой в самом контроллере службы.
Я также попытался использовать приведенный ниже код:
StringBuilder sb = new StringBuilder();
Process process = new System.Diagnostics.Process();
ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.FileName = @"sc";
startInfo.Arguments = "query \"My Service\"";
startInfo.UseShellExecute = false;
process.StartInfo = startInfo;
process.OutputDataReceived += (sender, args) =>
sb.AppendLine(args.Data);
process.StartInfo.RedirectStandardOutput = true;
process.Start();
process.BeginOutputReadLine();
process.WaitForExit();
Оба приведенных выше кода продолжают давать сбой в самом сервисном контроллере / SC.
Ошибка
Не удается открыть диспетчер управления службами на компьютере ".". Для этой операции могут потребоваться другие привилегии.
Наше приложение работает в IIS под учетной записью службы, и мы предоставили этой учетной записи права администратора и права удаленного доступа.
Не уверен, что еще нужно здесь дать. Есть ли какие-то особые права на доступ к службе Windows?
Попробуйте запустить свой код как «LocalSystem», там тоже хороший фон; https://stackoverflow.com/questions/39326284/cant-query-run-or-stop-a-windows-service