需要改进非常简单的c#服务器重启器的建议吗

需要改进非常简单的c#服务器重启器的建议吗,c#,winforms,C#,Winforms,最近我想到了一个简单的自动重启服务器的想法 基本上它所做的就是 检查是否有名为WerFault的进程正在运行 如果出现故障,则表示服务器已崩溃,因此它将同时关闭服务器和WerFault 然后再次打开服务器 它检查的第二件事是wServer是否正在运行,如果没有,它会启动它 这一切都在一个延时10秒的计时器内完成 然而,我非常确信有一种更有效的方法来做到这一点。我自学了C#(一本书也没读过,我所知道的都是通过自学+谷歌获得的) 另外,我希望服务器全天候开放的原因是它将在vps上运行 注意:这是

最近我想到了一个简单的自动重启服务器的想法

基本上它所做的就是

  • 检查是否有名为WerFault的进程正在运行
  • 如果出现故障,则表示服务器已崩溃,因此它将同时关闭服务器和
    WerFault
  • 然后再次打开服务器
  • 它检查的第二件事是
    wServer
    是否正在运行,如果没有,它会启动它
这一切都在一个延时10秒的计时器内完成

然而,我非常确信有一种更有效的方法来做到这一点。我自学了C#(一本书也没读过,我所知道的都是通过自学+谷歌获得的)

另外,我希望服务器全天候开放的原因是它将在vps上运行

注意:这是一个windows窗体应用程序

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Diagnostics;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            Process[] prs = Process.GetProcesses(); 
            foreach (Process pr in prs)
            {
                if (pr.ProcessName == "WerFault") 
                {
                    pr.Kill(); 

                    if (pr.ProcessName == "wServer") 
                    {
                        pr.Kill(); 
                        Process.Start(@"C:\Users\Arturs\Dropbox\ROTMGServer-master\bin\Debug\wServer\wServer.exe"); 
                    }
                    return;
                }
            }

            if (pr.ProcessName == "wServer")
            {
                return;
            }

            Process.Start(@"C:\Users\Arturs\Dropbox\ROTMGServer-master\bin\Debug\wServer\wServer.exe");                
            return;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            timer1.Start();
        }

        private void timer2_Tick(object sender, EventArgs e)
        {

        }
    }
}
}

你写了:

if (pr.ProcessName == "WerFault") 
{
   pr.Kill(); 
   {
       if (pr.ProcessName == "wServer") 
       {
           // ...
不太可能有一个进程
pr
ProcessName
既是字符串
“WerFault”
又是字符串
“wServer”


如果将第二个
移到第一个
之外,可能需要将第二个
移到第一个
之外。

括号的用法是wierd。你用的太多了。与其写一个程序来监视你的服务,为什么不使用Microsoft实用程序来完成这项工作呢,妈妈,或者如果你已经把它作为一项服务安装了,你可以对它进行编程,在它崩溃后延迟重启。工具箱中少了一个工具-或者您可能会编写另一个工具来监视监视器。:)