首页 > 解决方案 > 如何使用 c# 成功停止服务?

问题描述

我正在尝试使用以下代码停止服务:

    public static void StopService(string name, out string message)
    {
        message = string.Empty;         
        EndTask();

        ServiceController sc = new ServiceController();
        sc.ServiceName = name;

        if (sc.Status == ServiceControllerStatus.Running)
        {                               
            try
            {                    
                sc.Stop();
                sc.WaitForStatus(ServiceControllerStatus.Stopped);                
            }
            catch (Exception e)
            {                    
                throw ex;
            }
        }
        else
        {
            message = $"The service has been stopped.";
        }
    }

EndTask() 定义如下:

    public static void EndTask()
    {
        string taskname = "myservice.exe";
        string processName = taskname.Replace(".exe", "");

        foreach (Process process in Process.GetProcessesByName(processName))
        {
            process.Kill();
        }
    }

但我偶尔会收到以下错误

无法停止计算机“.”上的 mytestservice 服务。
内部异常:System.ComponentModel.Win32Exception (0x80004005):管道已结束”

这与 EndTask 例程有关吗?我需要异步运行 EndTask() 吗?

标签: c#

解决方案


推荐阅读