当给定服务关闭时,是否可以订阅事件。
我的程序偶尔会向第三方Windows服务发送命令,但是直到发送请求之前,我无法知道它是否正常运行,因为没有人在听,这会导致异常。
因此,我想尽可能地订阅一个事件,以便让我的用户知道他目前无法与该服务进行交互,而不是在尝试时给他一个错误。
我可以有一个现在运行的计时器,然后该计时器然后检查PID是否仍处于活动状态,但我希望操作系统立即告诉我。
答案 0 :(得分:0)
您可以尝试实施已启动服务的列表并在其中查找,这样您就不必发送并等待错误或类似结果。
在Windows(7及更高版本)上,您应该通过访问本地或远程servicecontroller来获得几乎完整的正在运行的服务列表。
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();
}
}