我们的部分工作是与ERP系统连接。通过在ERP系统的基本目录中调用名为IMPAUT.exe的特定exe,可以自动化该系统中的某些进程。我将ERP子程序ID传递给IMPAUT,然后它就会启动。
现在,IMPAUT所做的是确定ERP安装是客户端还是独立安装,然后IMPAUT会触发子进程。此子进程是IMPACT.exe或IMPCSC.exe。一旦IMPAUT解雇了子进程,IMPAUT就会死掉。儿童过程继续存在一段时间。子进程只有在完成命令并退出ERP系统后才会死亡。
问题是,当子进程仍然存在时,我无法再次调用IMPAUT,因为只有一个子程序实例可能会登录到ERP系统。我也无法监控IMPAUT何时死亡,因为在IMPAUT死后很长时间内,子进程仍然存在。
我需要确定子进程何时因调用它的特定IMPAUT进程而死亡。因此,从父进程开始,我需要在父进程死亡之前获取它调用的子进程,并监视子进程的生命周期。
答案 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