2011-02-10 31 views
0

下午好。最佳做法:App1.exe啓動進程App2.exe,然後App2.exe需要關閉App1.exe

我必須承認這是一個奇怪的工作要做,但我需要它... :-)

今天有一個C#控制檯應用程序(我將它命名爲App1.exe)由我的同事叫,在COBOL工作。當App1.exe完成其工作時,自行關閉,然後COBOL程序可以繼續並讀取從App1生成的文件。

這個App1每天打開和關閉一百次,並且它不是那麼快...... 現在我需要在一個系統托盤應用程序中獲取業務邏輯,隨時準備好快速回復請求,但我無法強制我的同事改變他們的程序:他們會打電話給App1.exe,等待它關閉。所以我創建了一個單獨的App2.exe(我不能使用系統服務)來完成這項工作;所以現在我想到了這個解決方案:App1.exe只是調用App2.exe(傳遞命令行參數),然後它仍然處於待機狀態(使用Process.Start(App2.exe)和Process.WaitForExit())。當App2.exe完成工作時,殺死App1.exe,以便COBOL程序可以檢測到工作已完成並繼續讀取從App2.exe生成的文件。在這個解決方案中(快速和骯髒的方式,我只是想...)有一個問題:App1.exe被App1.exe調用,所以看起來一個被調用的exe不能殺死他的父母,isn'它呢?

有更好的/推薦的方式來做這種工作? 我只能使用C#2.0。

謝謝你們,任何想法都是值得歡迎的。
Nando

+0

請問您可以粘貼從應用程序1和應用程序2相關的代碼(即進程啓動和終止邏輯)? –

回答

2

使用其中一種進程間通信機制使app1.exe與app2.exe進行通信。套接字,命名管道,Remoting,WCF。既然你只需要傳遞一個命令行,一個簡單的套接字就可以完成工作。當你從app2.exe收到一條消息說完成該任務後,只需退出app1.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堆棧實現;可能是我需要的一個很好的解決方案
再見,南多