从程序检测服务关闭

时间:2019-07-05 11:24:09

标签: c#

当给定服务关闭时,是否可以订阅事件。

我的程序偶尔会向第三方Windows服务发送命令,但是直到发送请求之前,我无法知道它是否正常运行,因为没有人在听,这会导致异常。

因此,我想尽可能地订阅一个事件,以便让我的用户知道他目前无法与该服务进行交互,而不是在尝试时给他一个错误。

我可以有一个现在运行的计时器,然后该计时器然后检查PID是否仍处于活动状态,但我希望操作系统立即告诉我。

2 个答案:

答案 0 :(得分:0)

您可以尝试实施已启动服务的列表并在其中查找,这样您就不必发送并等待错误或类似结果。

在Windows(7及更高版本)上,您应该通过访问本地或远程servicecontroller来获得几乎完整的正在运行的服务列表。

更多内容:https://docs.microsoft.com/en-us/dotnet/api/system.serviceprocess.servicecontroller.getservices?view=netframework-4.8

https://answers.unity.com/questions/971269/subscribing-to-event-from-external-class.html

答案 1 :(得分:0)

如果这对其他人有用的话,我就结束了这堂课

public class ExternalProcessMonitor
{
    Process process;
    Action action;
    string name;

    public ExternalProcessMonitor(string _name, Action _action)
    {
        action = _action;
        name = _name;
    }

    public bool StartMonitor()
    {
        if (process != null)
            process.Exited -= Process_Exited;
        var list = Process.GetProcesses().OrderBy(r => r.ProcessName);
        process = Process.GetProcessesByName(name).FirstOrDefault();
        if (process != null)
        {
            process.Exited += Process_Exited;
            process.EnableRaisingEvents = true;
        }
        return process != null;
    }

    private void Process_Exited(object sender, EventArgs e)
    {
        action();
    }
}