C#:自动重启程序
问题描述:
我目前正在开发一个小游戏服务器,它有一个“模拟器”。有时候它会崩溃,用户需要等到我下班后才能开始工作,所以我想询问是否有人知道,如果有一种方法可以自动重新启动.exe(其中有3个),如果它崩溃了,那么如果程序显示“...停止工作”。C#:自动重启程序
有人帮我吗?
答
你可以编写一个简单的批处理文件来检查exe主函数(退出代码)的返回值。
或者只是编写一个简单的程序,以Process.Start
开头,如果它没有运行 - >枚举并检查Process.GetProcesses()
。
如果'服务器'本身没有提供编程的服务,你也可以创建一个服务。
有很多选择......
答
站在沉船,这是很难从下沉的船救自己......你最好的赌注是第二个过程中,某种看门狗检查是否应用仍然活着,如果没有,它会自动启动它。
您可以枚举通过调用
System.Diagnostics.Process.GetProcesses
答
订阅Process.Exited
事件,当它退出重新启动它正在运行的进程:
var proc = Process.GetProcessesByName("my-server").Single();
proc.EnableRaisingEvents = true;
proc.Exited += (a, e) =>
{
proc = Process.Start(...); // Restart the process
};
答
有多种方法可以做到这一点 铭记你有您的检查条件提前检查 例如
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);
}
A“的小游戏** **服务器”可能应该是一个Windows服务,它有内置的自动重启对崩溃。 – Fildor
...外面,你可能应该修复崩溃;) – Fildor
_该程序说:“...停止工作”_如果程序不**完全**退出,你可能不得不周期列举窗口的路线为该错误消息的存在,然后杀死并重新启动应用程序。查找使用'EnumWindows()'的例子,就像在[this thread]中一样(https://*.com/questions/19867402/how-can-i-use-enumwindows-to-find-windows-with-a-specific-标题标题)。你也可以使用FindWindow()来通过**类型**来搜索那个错误信息。 –