【问题标题】:C#: Auto Restarting a ProgramC#:自动重启程序
【发布时间】:2017-09-15 11:43:57
【问题描述】:

我目前正在开发一个小型游戏服务器,它有一个“模拟器”。有时它会崩溃,用户必须等到我下班回来,所以我想问一下是否有人知道,如果它崩溃了,是否有办法自动重启 .exe(其中有 3 个),所以如果程序说“...停止工作”。

有人帮帮我吗?

【问题讨论】:

  • 一个“小游戏服务器”应该是一个Windows服务,它内置了崩溃时自动重启。
  • ...除此之外,您可能应该修复崩溃;)
  • 程序说“...停止工作” 如果程序没有完全退出,您可能需要定期枚举窗口查找该错误消息的存在,然后终止并重新启动应用程序。使用EnumWindows() 查找示例,例如this thread。您也可以使用FindWindow()类类型搜索该错误消息。

标签: c#


【解决方案1】:

站在沉船中,很难将自己从沉船中拯救出来……最好的选择是第二个进程,某种看门狗检查应用程序是否还活着,如果没有则自动启动它。

可以通过调用枚举正在运行的进程

System.Diagnostics.Process.GetProcesses

【讨论】:

    【解决方案2】:

    您可以编写一个简单的批处理文件来检查 exe 的主函数(退出代码)的返回值。

    或者只是编写一个简单的程序以 Process.Start 启动它,如果它没有运行 -> 枚举并检查 Process.GetProcesses()

    如果“服务器”本身不提供已编程的服务,您也可以创建服务。

    有很多选择...

    【讨论】:

      【解决方案3】:

      订阅Process.Exited事件退出时重启:

      var proc = Process.GetProcessesByName("my-server").Single();
      proc.EnableRaisingEvents = true;
      
      proc.Exited += (a, e) =>
      {
          proc = Process.Start(...);  // Restart the process
      };
      

      【讨论】:

        【解决方案4】:

        有多种方法可以做到这一点 记住你有你的检查条件事先检查 例如

        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); 
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-03-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-07
          • 2015-06-20
          • 1970-01-01
          相关资源
          最近更新 更多