选中复选框后,如何使进程一次又一次地重新启动?

时间:2013-10-26 17:08:39

标签: c# process restart

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

这是我的代码:

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

2 个答案:

答案 0 :(得分:0)

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

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命名空间中。

答案 1 :(得分:0)

虽然它不是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")
  }
}

您还应该在main或init代码中创建文件。

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

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