2017-09-15 85 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); 
}