2011-02-10 15 views
0

午後。ベストプラクティス:App1.exeがApp2.exeプロセスを開始し、App2.exeがApp1.exeを終了する必要があります

私の同僚によって呼び出されるC#のコンソールアプリケーションは、(私はApp1.exeという名前を付けます)、があります今日

:-) ...私はこれを行うには奇妙な仕事で認める必要があるが、私はそれを必要としますCOBOLで作業しています。 App1.exeが作業を終了して終了すると、COBOLプログラムはApp1から生成されたファイルを読み込むことができます。

このApp1は1日に100回開いたり閉じたりしていて、それほど速くはありません。 これで、ビジネスロジックをシストレイアプリケーションで取得する必要があります。同僚たちはプログラムを変更します。App1.exeを終了して待っています。だから、私は仕事をする単一のアイタンスApp2.exe(私はシステムサービスを使うことができない)を作ります。だから、私はこの解決策を考えました。App2.exeは単にApp2.exe(コマンドライン引数を渡す)を呼び出し、待機状態(Process.Start(App2.exe)とProcess.WaitForExit()を使用)のままです。 App2.exeが正常に終了するとApp1.exeが終了し、COBOLプログラムが作業を検出してApp2.exeから生成されたファイルの読み取りを続行できるようになります。

問題があります:App2.exeがApp1.exeによって呼び出されたので、呼び出されたexeが親を殺すことはできません。それ?

この種の作業を行うには、より良い/推奨の方法がありますか? 私はC#2.0しか使用できません。

どうもありがとうございました。
Nando

+0

アプリ1とアプリ2から適切なコードを貼り付けてください(プロセスの開始と終了のロジック)。 –

答えて

2

プロセス間通信メカニズムの1つを使用して、app1.exeをapp2.exeと通信させます。ソケット、名前付きパイプ、Remoting、WCF。コマンドラインを渡すだけで済むので、シンプルなソケットで作業を完了できます。 app2.exeを終了すると、app2.exeからジョブが完了したことを知らせるメッセージが表示されます。何も終了する必要はありません。

+0

私はこの種のコードでの経験はありません;私はC#2.0しか使用できないので、おそらくリモート処理は適切なツールです。私は数年前にIPCを試してみましたが、デバッグするのはそれほど面倒ではありませんでした。ありがとうございました! –

0

プロセス全体を監督するマネージャー/モニターアプリを作成します。オンデマンドで新しい子アプリケーションを作成します(App1)。 App1は、マネージャ/モニタに依頼することによってApp2が開始されたことを要求できます。

App2がApp1を閉じようとすると、それはマネージャ/モニタにそれを要求することができます。

この方法では、デバッグ、ログ、監視、監査、および各アプリケーションの起動/停止時のルール設定ができます。ずっといい!

+0

これは解決策になるかもしれませんが、もし私がいくつかのコードの作業に時間を費やす必要があれば、おそらくリモーティングに費やすでしょう。ありがとうございました! –

0

これは、プロセスを呼び出して終了させるために使用するコードです。

//App1.exe 
var p = Process.Start("App2.exe", myargs); 
p.WaitForExit(); 

//App2.exe 
//do the work calling my App2.exe business logic plugin... 
//Close calling exe; caller variable is fullpath of my App1.exe, like D:\myapp\app1.exe 
Process[] pArry = Process.GetProcesses(); 
foreach (Process p in pArry) 
{ 
    string s = p.ProcessName; 
    s = s.ToLower(); 
    if (s.CompareTo(caller) == 0) 
    { 
     p.Kill(); 
    } 
} 

:-)仕事をするかもしれない、あまりにもシンプルな

本当に単純なコードは、ありがとう!

0

興味深いプロジェクト:WCF Killerが見つかりました。
これはシンプルで強力なクライアント/サーバーTCPスタックの実装です。おそらく私の必要性のための良い解決策です。
Bye、Nando

関連する問題