簡體   English   中英

從 C# 代碼停止 Windows 服務不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM