2017-09-15 110 views
1

我目前正在開發一個小遊戲服務器,它有一個「模擬器」。有時候它會崩潰,用戶需要等到我下班後才能開始工作,所以我想詢問是否有人知道,如果有一種方法可以自動重新啓動.exe(其中有3個),如果它崩潰了,那麼如果程序顯示「...停止工作」。C#:自動重啓程序

有人幫我嗎?

+3

A「的小遊戲** **服務器」可能應該是一個Windows服務,它有內置的自動重啓對崩潰。 – Fildor

+1

...外面,你可能應該修復崩潰;) – Fildor

+0

_該程序說:「...停止工作」_如果程序不**完全**退出,你可能不得不周期列舉窗口的路線爲該錯誤消息的存在,然後殺死並重新啓動應用程序。查找使用'EnumWindows()'的例子,就像在[this thread]中一樣(https://stackoverflow.com/questions/19867402/how-can-i-use-enumwindows-to-find-windows-with-a-specific-標題標題)。你也可以使用FindWindow()來通過**類型**來搜索那個錯誤信息。 –

回答

0

你可以編寫一個簡單的批處理文件來檢查exe主函數(退出代碼)的返回值。

或者只是編寫一個簡單的程序,以Process.Start開頭,如果它沒有運行 - >枚舉並檢查Process.GetProcesses()

如果'服務器'本身沒有提供編程的服務,你也可以創建一個服務。

有很多選擇......

0

站在沉船,這是很難從下沉的船救自己......你最好的賭注是第二個過程中,某種看門狗檢查是否應用仍然活着,如果沒有,它會自動啓動它。

您可以枚舉通過調用

System.Diagnostics.Process.GetProcesses 
0

訂閱Process.Exited事件,當它退出重新啓動它正在運行的進程:

var proc = Process.GetProcessesByName("my-server").Single(); 
proc.EnableRaisingEvents = true; 

proc.Exited += (a, e) => 
{ 
    proc = Process.Start(...); // Restart the process 
}; 
0

有多種方法可以做到這一點 銘記你有您的檢查條件提前檢查 例如

If(stopped working){ 
ProcessStartInfo Info = new ProcessStartInfo(); 
Info.Arguments = "/C ping 127.0.0.1 -n 2 && \"" + Application.ExecutablePath 
+ "\""; 
    Info.WindowStyle = ProcessWindowStyle.Hidden; 
Info.CreateNoWindow = true; 
Info.FileName = "cmd.exe"; 
Process.Start(Info); 
Application.Exit(); 
} 

另一種方式是

If(stopped working){ 
Application.Restart(); 
} 

另一種方式是

If(stopped working){ 
Process.Start(Application.ExecutablePath); 
}