0

最近我有一个想法,为我的服务器 exe 提供一个简单的自动重启器。

基本上它所做的就是

  • 检查是否有一个名为WerFaultrunning的进程
  • 如果有这意味着服务器已经崩溃,所以它关闭了服务器和WerFault
  • 之后再次打开服务器。
  • 它检查的第二件事是它是否wServer正在运行,如果没有,它会启动它。

这一切都在一个延迟 10 秒的计时器内。

但是,我非常确定有一种更有效的方法可以做到这一点。我自学了 C#(没有读过一本书,我所知道的都是通过自学 + Google 获得的)。

另外我希望服务器 24/7 开放的原因是因为它将在 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)
        {

        }
    }
}

}

4

1 回答 1

0

你写过:

if (pr.ProcessName == "WerFault") 
{
   pr.Kill(); 
   {
       if (pr.ProcessName == "wServer") 
       {
           // ...

不太可能存在一个既是 string是 stringpr的进程。ProcessName"WerFault" "wServer"

也许您想将第二个移到第一个if 之外

于 2013-09-24T12:51:33.513 回答