2011-09-28 53 views
0

我正在使用System.Diagnostic.Process調用另一個.exe。我正在創建一個應用程序,目的是在遠程服務器上運行。這個.exe有時會崩潰,並且彈出信息會停止整個過程 - > [應用程序名稱]遇到問題並被強制關閉。我試圖找到一種方法讓我的C#程序忽略此彈出框並繼續執行。如何從使用System.Diagnostic.Process執行的exe中禁用對話框?

回答

3

是否修復了被調用的.exe而不是選項的錯誤?

+1

+1我在想同樣的事情。總是更好地解決根本原因,而不是在其他地方編碼 – Matt

+1

+1是選項! – gbianchi

+0

實際上我對.exe程序的代碼沒有責任,並且我想避免它可能遇到的任何問題 – ElCapitaine

1

在這種情況下,當你的進程不能正常工作,你會看到多數民衆贊成在Windows默認的彈出,但如果你想知道這個過程成功與否跑那麼這段代碼會爲你工作

訂閱過程。退出事件,然後檢查Process.ExitCode:

public void StartProcess() 
{ 
p.StartInfo.FileName = BasePath; 
p.StartInfo.Arguments = args; 
p.Start(); 
p.Exited += new EventHandler(Process_Exited); 
} 

void Process_Exited(object sender, EventArgs e) 
{ 
var p = sender as Process; 
if (p.ExitCode != 0) 
    MessageBox.Show(string.Format("Process failed: ExitCode = {0}", p.ExitCode)); 
} 
+0

如果您不對EXE負責。這與我的問題相同,只是給他們留言,聯繫系統管理員並顯示退出代碼並將其登錄到會通知每個用戶的數據庫中。 –

0

恕我直言,運行這樣的越野車EXE最乾淨的方法是,啓動它在它給你的過程調試權限(您可能必須通過P/Invoke來顯式調用CreateProcess與進程創建標誌中的DEBUG_PROCESS標誌),然後有一個線程進程由WaitForDebugEvent提供的調試事件;每當你得到一個未處理的最後一次異常時,你可以通知主線程,終止子進程(從而避免缺省的Windows異常處理程序)並在必要時重啓它,在其他情況下,只需調用ContinueDebugEvent即可讓程序正常運行。

請注意,指向由WaitForDebugEvent提供的「事件結構」的指針在C#中可能會很棘手。


編輯:幸運似乎有人提出對本機調試API一個不錯的託管包裝,看到here