【发布时间】:2011-12-04 13:44:37
【问题描述】:
我有一个很好的老式 Windows 服务(继承自 System.ServiceProcess.ServiceBase),我通过this.components.Add(new MyStuff());向其中添加了一个组件(实现 IComponent)
但是,如果我从任务管理器关闭 exe,MyStuff 的 Disposable() 不会运行。
可能的嫌疑人:
- “结束进程”上没有运行。如果是这样,我该如何清理自己(例如杀死已启动的进程?)
-
出于测试目的,我使用
开始我的服务var service = new MyService();
service.Run();
Thread.Wait(Timeout.Infinite);这不是
ServiceBase.Run(new []{new MyService()});的问题吗? - ServiceBase 不会自动清理。如果是这样,我该怎么办?
请帮忙!
附加信息:我正在尝试使用 Process.Start(...) 关闭我从我的服务启动的其他 exe,所以如果有办法让它们自动关闭(子进程?)也很好。
【问题讨论】:
-
这看起来可能是相关的:stackoverflow.com/questions/3342941/…
-
如果您可以同时更改父进程和子进程中的代码,那么在子进程中拥有检测父进程死亡并自动杀死子进程的代码可能会更容易。
-
@Damien_The_Unbeliever:我如何检测到它?我是否检查是否有任何与我的父母同名的进程?没有更好的吗?
-
除其他问题外,还请注意,不能保证终结器将在进程终止时运行。如果你的终结器花费的时间太长,CLR 就会放弃。
标签: c# .net process windows-services idisposable