2010-12-01 6 views
0

私たちの仕事の一部はERPシステムとインターフェースしています。 ERPシステムのベースディレクトリにあるIMPAUT.exeという特定のexeを呼び出すことで、そのシステム内のプロセスの一部を自動化することができます。私はIMPAUTにERPサブプログラムIDを渡して、それは発砲します。C#で子プロセスの存続期間を記録する

ここでIMPAUTの役割は、ERPインストールがクライアントインストールかスタンドアロンインストールか、IMPAUTが子プロセスを起動するかどうかを判断することです。この子プロセスは、IMPACT.exeまたはIMPCSC.exeです。 IMPAUTが子プロセスを起動すると、IMPAUTは終了します。子プロセスはしばらくの間生き続けます。子プロセスは、コマンドを完了してERPシステムからログアウトしたときにのみ終了します。

子プロセスがまだ生きている間に、子プログラムの1つのインスタンスしかERPシステムにログインできないため、IMPAUTを再度呼び出すことはできません。私はまた、IMPAUTが死亡した後も子プロセスが長く生き続けるので、IMPAUTが死ぬ時を監視することはできません。

子プロセスが呼び出された特定のIMPAUTプロセスで子プロセスがいつ終了するかを判断する必要があります。だから親から、私はそれが呼び出す子プロセスを取得する前に、親プロセスが死んで、その子プロセスの生涯を監視する必要があります。

答えて

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 
+0

ありがとうございます。このコードは、特定の親の子を取得するためにどのように使用されますか。私はこれをどのように実装しますか? –

1

を助けるかもしれない私は、あなたがプロセスを検索し、終了コードをチェックするためにシステム診断の名前空間からProcess.GetProcessesByName()を使用する必要があると思いますプロパティがまだ実行されているかどうかを確認します。
ERPシステムが終了コードで正常に動作する場合は、何かが機能しているかどうかを確認することもできます。
名前が一意でない場合は、Process.MainModuleプロパティとProcess.Moduleプロパティを確認し、すべてのプロセスにProcess.GetProcessesを使用します。

+0

子プロセス名がわからないので、Process.GetProcessesByName()を使用できません。第二に、私のIMPAUT親とは無関係の同じ名前の子プロセスが存在する可能性があります。 –

関連する問題