跟踪C#中子进程的生命周期

时间:2010-12-01 07:40:18

标签: c#

我们的部分工作是与ERP系统连接。通过在ERP系统的基本目录中调用名为IMPAUT.exe的特定exe,可以自动化该系统中的某些进程。我将ERP子程序ID传递给IMPAUT,然后它就会启动。

现在,IMPAUT所做的是确定ERP安装是客户端还是独立安装,然后IMPAUT会触发子进程。此子进程是IMPACT.exe或IMPCSC.exe。一旦IMPAUT解雇了子进程,IMPAUT就会死掉。儿童过程继续存在一段时间。子进程只有在完成命令并退出ERP系统后才会死亡。

问题是,当子进程仍然存在时,我无法再次调用IMPAUT,因为只有一个子程序实例可能会登录到ERP系统。我也无法监控IMPAUT何时死亡,因为在IMPAUT死后很长时间内,子进程仍然存在。

我需要确定子进程何时因调用它的特定IMPAUT进程而死亡。因此,从父进程开始,我需要在父进程死亡之前获取它调用的子进程,并监视子进程的生命周期。

2 个答案:

答案 0 :(得分:1)

我想您需要使用System diagnostics命名空间中的Process.GetProcessesByName()来查找进程,并检查退出代码属性是否仍在运行。
如果ERP系统使用退出代码干净利落地运行,那么您还可以检查某些内容是否有效 如果名称不唯一,请查看Process.MainModule和Process.Module属性,并对所有进程使用Process.GetProcesses。

答案 1 :(得分:0)

可能会在代码下方提供帮助

AppDomain.CurrentDomain.DomainUnload += new EventHandler(CurrentDomain_DomainUnload);

void CurrentDomain_DomainUnload(object sender, EventArgs e)
    {
        // Here you can write to some file about te status 

    }

 Process.GetCurrentProcess().Exited event