同様の質問でここに多くの投稿を読みましたが、問題の解決に役立つものはありませんでした。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();