需要有关改进非常简单的c#server restarter的建议

时间:2013-09-24 10:39:42

标签: c# winforms

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

基本上它只是

  • 检查是否有名为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)
        {

        }
    }
}

}

1 个答案:

答案 0 :(得分:0)

你写过:

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

不可能有prProcessName字符串"WerFault" 字符串"wServer"。< / p>

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