ServiceController - не могу остановить службу [C #] - PullRequest
1 голос
/ 30 января 2020

Я прочитал много постов здесь с похожим вопросом, но ни один не помог мне решить мою проблему. Я хочу остановить службу с объектом ServiceController. Но происходит сбой, и я получаю исключение: System.ComponentModel.Win32Exception (0x80004005) . Я не понимаю, почему .. Я запускаю программу с «Запуск от имени администратора».

ServiceController ctrl = ServiceController.GetServices().Where(s => s.ServiceName == "service_name").SingleOrDefault();
if (ctrl == null) return;

if (ctrl.Status.Equals(ServiceControllerStatus.Running))
{
   try 
   {
      ctrl.Stop();
   }
   catch(Exception ex)
   {
      Log(ex.ToString(), 3);
   }
}

Если я вызываю команду net stop из кода, то все работает. Почему?

 Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.CreateNoWindow = true;
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.UseShellExecute = false;
cmd.Start();
cmd.StandardInput.WriteLine("net stop service_name");
cmd.StandardInput.Flush();
cmd.StandardInput.Close();
cmd.WaitForExit();

1 Ответ

1 голос
/ 03 февраля 2020

После нашего продолжения обсуждения в чате ServiceController было обнаружено следующее:

  • ServiceController смог Start сервис, но не Stop
  • из системы В журналах было очевидно, что ServiceController аварийно завершает работу при попытке остановить
  • ServiceControllers Start & Stop, отлично работает с другими службами, такими как PrintSpooler
  • Использование CMD или Process.Start мы можем остановить сервис по sc stop "servicename"
  • Наконец, проблема была в самом Сервисе и в том, как он был построен
...