我想为我的服务器创建一个自动重启器。我添加了一个复选框并进行了所有必需的检查,但我不知道如何在崩溃时重启该进程。
这是我的代码:
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
}
}
}
答案 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.Diagnostics
和System.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文件中,然后使用它来启动程序。