进程终止时的 IDisposable 代码

TDa*_*ver 5 .net c# windows-services idisposable process

我有一个很好的老式 Windows 服务(继承自 System.ServiceProcess.ServiceBase),我向其中添加了一个组件(实现 IComponent),但是如果我从任务管理器关闭 exe,this.components.Add(new MyStuff());
MyStuff就不会运行。Disposable()

可能的嫌疑人:

  • “结束进程”上没有任何运行。如果是这样,我该如何清理自己(例如杀死启动的进程?)
  • 出于测试目的,我开始我的服务

    var service = new MyService();
    service.Run();
    Thread.Wait(Timeout.Infinite);

    而不是ServiceBase.Run(new []{new MyService()});这可能是问题所在?

  • ServiceBase 不会自动清理。如果是这样,我该怎么办?

请帮忙!

附加信息:我正在尝试使用 Process.Start(...) 关闭我从服务中启动的其他 exe,所以如果有办法让它们自动关闭(子进程?),那也可以。

Dam*_*ver 2

我让孩子发现父母去世的典型方式是:

  • 在父进程启动期间,生成一个好听的、长的、随机的名称
  • 此外,在启动期间,获取具有此名称的命名互斥锁,并在父级的生命周期内保持锁定状态。
  • 启动子进程时,将长随机名称作为参数传递
  • 在子级中,专用一个线程来尝试获取相同命名的互斥体。
  • 如果子进程获得了互斥锁,则父进程一定已经死亡 - 所以子进程也应该退出

通过为互斥体使用随机名称,您可以确保即使旧的父/子层次结构正在关闭,也可以构建新的层次结构。