0

最近、サーバー exe の単純な自動再起動のアイデアがありました。

基本的にそれがすることはすべてです

  • WerFaultrunningという名前のプロセスがあるかどうかを確認します
  • 存在する場合は、サーバーがクラッシュしたことを意味するため、サーバーとWerFault
  • その後、サーバーを再度開きます。
  • 2 番目に確認することは、wServerが実行されているかどうか、そうでない場合は起動することです。

これはすべて、10 秒の遅延を伴うタイマー内です。

しかし、これを行うためのはるかに効率的な方法があると確信しています。私は独学で C# を学びました (本を 1 冊も読んだことがありません。私が知っているのは、自己学習 + Google を通じて習得したものだけです)。

また、サーバーを 24 時間年中無休で稼働させたい理由は、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とstring の両方であるプロセスprが存在する可能性はほとんどありません。ProcessName"WerFault" "wServer"

if おそらく、最初のものの外に2 番目のものを移動したいでしょう。

于 2013-09-24T12:51:33.513 に答える