[英]Stopping Windows Service from C# code doesn't work
我的代碼必須停止服務。 我正在使用下面的代碼:
ProcessStartInfo processInfo = new ProcessStartInfo();
processInfo.UseShellExecute = true;
processInfo.FileName = Environment.ExpandEnvironmentVariables("%SystemRoot%") + @"\System32\cmd.exe";
processInfo.Arguments = "sc stop SERVICENAME";
processInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
processInfo.Verb = "runas"; //The process should start with elevated permissions
Process process = new Process() { EnableRaisingEvents = true, StartInfo = processInfo };
process.Start();
process.WaitForExit();
然后,我使用以下命令從CMD
窗口(手動,而不是在我的程序中)檢查服務狀態: sc SERVICENAME query
。 但是狀態仍然是RUNNING
。
當我停止它以管理員身份打開cmd
並執行相同的命令( sc stop SERVICENAME
)時,它就可以工作。
關於為什么我的代碼不起作用的任何想法?
對於 C# 和 .NET,最好像這樣使用ServiceController類:
ServiceController controller = new ServiceController("SERVICENAME");
controller.Stop();
使用sc stop SERVICENAME
作為參數執行cmd.exe
不會做任何事情。 它只會啟動命令提示符。
要解決您的問題,只需直接執行sc.exe
,將stop SERVICENAME
作為參數傳遞。
// ...
processInfo.FileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "sc.exe");
processInfo.Arguments = "stop SERVICENAME";
// ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.