选中复选框时,如何使进程一遍又一遍地重新启动

本文关键字:一遍 重新启动 进程 复选框 何使 | 更新日期: 2023-09-27 18:37:02

我想为我的服务器创建一个自动重启器。我添加了一个复选框并进行了所有必需的检查,但我不知道如何在崩溃时重新启动该过程。

这是我的代码:

private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
    string world = textBox1.Text;
    string auth = textBox2.Text;
    if (checkBox1.Checked == true)
    {
        if (textBox1.Text.Trim().Length == 0 || textBox2.Text.Trim().Length == 0)
        {
            MessageBox.Show("Please check if you selected the path for worldserver and authserver");
        }
        else
        {
            //here i need something to restart those 2 processes after crash/close
        }
    }   
}

选中复选框时,如何使进程一遍又一遍地重新启动

启动进程的最简单方法是使用 Process 类的 Start 静态方法:

Process.Start("yourapp.exe");

要访问更具体的选项,您可以改为设置ProcessStartInfo对象:

var startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = false;
startInfo.FileName = "yourapp.exe";
startInfo.Arguments = "-arg1 val1";
var exeProcess = Process.Start(startInfo);
exeProcess.Start();

要检查有问题的进程是否仍在运行,您可以使用以下命令:

var matchingProcesses = Process.GetProcessesByName("yourapp");
var isRunning = matchingProcesses.Length > 0;

你可以把它放在一个方法中,每隔几秒钟或几毫秒轮询一次(取决于你想要的响应速度):

var aTimer = new Timer();
aTimer.Elapsed += new ElapsedEventHandler(YourMethod);
aTimer.Interval = 1000;
aTimer.Enabled = true;

这些类分别位于 System.DiagnosticsSystem.Timers 命名空间中。

虽然它不是 C#(但更好的是,它几乎适用于任何程序),但您可以批量(或 bash,但我不会将代码放在这里)进行自动重启器,

在大多数情况下就足够了:
@echo off
:start
myprogram.exe %*
if exist myprogam.lock goto start

在您的程序内部:

private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
  if(checkBox1.Checked)
  {
     using (System.IO.File.Create("myprogam.lock"));
  }
  else
  {
     System.IO.File.Delete("myprogam.lock")
  }
}

您还应该在主代码或初始化代码中创建文件。

奖励:如果您的程序完全退出(或出现某些错误),您可以删除该文件,并且它不会重新启动。

要使用,只需将第一个代码放入您放入程序文件夹中的.bat文件中,然后使用它来启动程序。