选中复选框时,如何使进程一遍又一遍地重新启动
本文关键字:一遍 重新启动 进程 复选框 何使 | 更新日期: 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.Diagnostics
和 System.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文件中,然后使用它来启动程序。