2011-04-29 163 views
1

我有一個小的Windows窗體應用程序需要能夠運行一個外部應用程序無限次數,而不必在每次運行後關閉該應用程序。Windows窗體 - 反覆運行一個外部進程

外部應用程序作爲單個實例運行,非常耗費資源並且加載速度很慢。的基本工作流程如下:

1:等待觸發加載外部應用 2:觸發凸起,使用命令行參考打開外部應用 3:監視一個日誌文件 3:外部應用進程在命令行中的數據,並寫入日誌文件 4:日誌文件更改,所以下一個命令行發送到(打開)外部應用 5:轉至步驟3

我的問題是,我無法找到一個加載外部應用程序的方式,而不必先關閉/終止進程。

applicationProcess.StartInfo.FileName = commandLine; 
applicationProcess.Start(); 

// Watch for change in log file and then... 
applicationProcess.StartInfo.FileName = commandLine; 
applicationProcess.Start(); 

等,但如果我不

applicationProcess.Kill(); 

之前,我再次發出applicationProcess.Start()方法,我得到一個線程異常。

我認爲我需要做的是從applicationProcess一旦開始就斷開連接,但是找不到任何機制來做到這一點。

任何意見/方向將不勝感激。

謝謝。

回答

0

我已經通過創建一個批處理文件啓動應用程序發現瞭解決此問題的方法。的工作流程如下:

1:我的應用程序啓動用命令行參數的批處理文件

2:批處理文件運行-重新運行的主應用程序

3:我的應用程序殺死並處理這個過程。

第3步簡單地關閉正在運行批處理文件的進程,而不是主應用程序進程 - 我需要保持打開狀態。

的批處理文件不能再簡單:

@echo off 
"C:\Program Files (x86)\Microsoft Office\Office14\Excel.exe" %1 

我有一個循環了一個多小時運行這一點,並沒有發現問題。

1

如果您打算啓動外部應用程序的新實例,則只需分配一個新的Process()對象。每次啓動外部應用程序時創建一個Process()對象,而不是嘗試重新使用原始對象。

如果您打算操作已經啓動的外部應用程序的現有實例,那麼您不需要再次調用Start(),只需繼續使用applicationProcess即可。

0

當你創建一個新的applicationProcess,並保留舊列表或類似的東西時它工作嗎?

+0

是的,如果我爲每個調用創建一個新的ProcessObject它似乎工作,但我擔心如何將無限數量的過程對象添加到正在運行的應用程序,因爲我認爲這些將消耗內存/資源,即使目標應用程序仍然是一個實例。 – Neilski 2011-04-29 14:40:37

+0

是的,但是這種設計不是固有的問題,您需要反覆運行沉重的應用程序?也許你應該認爲整個概念結束了。 – LueTm 2011-04-29 16:07:20

+0

@Neilski,您可以隨時瀏覽列表,並Dispose()您將不再使用的任何過程對象。 – Eric 2011-04-29 17:52:18