使用.net完美解决服务器注销后go的web服务停止的有关问题

使用.net完美解决服务器注销后go的web服务停止的问题

问题描述: 服务器注销后,所有与用户相关的正在运行的.exe文件都会退出,正因为如此,导致了go网站的.exe程序关闭了

解决办法:通过windows服务 

                网上制作windows服务的方法多的很,但是并不是所有的exe文件都能做成服务,go build后的.exe恰好不能!所以,只能通过别的方式了:使用.net制建一个服务项目,在这个服务项目内监听go网站的.exe程序的运行情况,如果go网站的.exe程序停止,那么立马在该windows服务中启动它,所以即使注销也不怕了.

详情如下:

1)go build   生成exe文件   (我的在D:\Go\src\myweb\myweb.exe)

2)建立windowsService项目  (注意版本)

核心代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;
using System.Timers;

namespace BdiaService
{
    public partial class Bdia : ServiceBase
    {
        public Bdia()
        {
            InitializeComponent();
        }

        /// <summary>
        /// 服务启动的时候 调用的函数
        /// </summary>
        /// <param name="args"></param>
        protected override void OnStart(string[] args)
        {
            Check2();//启动myweb应用程序
            Timer t1 = new Timer(60000);
            t1.Elapsed += new ElapsedEventHandler(Check);//每隔1分钟检查一次
            t1.Start();  // 启动计时器。
        }

        /// <summary>
        /// 服务停止的时候,关闭已经启动的myweb
        /// </summary>
        protected override void OnStop()
        {
           
            Process[] myprocess = Process.GetProcessesByName("myweb");
            if (myprocess.Length > 0)
            {
                myprocess[0].CloseMainWindow();
                myprocess[0].Close();
            }
        }

        /// <summary>
        /// 计时器执行函数
        /// </summary>
        /// <param name="o"></param>
        /// <param name="e"></param>
        public  void Check(Object o, ElapsedEventArgs e)
        {
            Process[] myprocess = Process.GetProcessesByName("myweb");//获取名字为myweb的进程
            if (myprocess.Length > 0)//如果存在,说明已经启动
            {
                //关闭
                // myprocess[0].CloseMainWindow();
                // myprocess[0].Close();
            }
            else//否则  启动myweb.exe
            {
                Process.Start(@"D:\Go\src\myweb\myweb.exe");
            }
        }
      
        public  void Check2()
        {
            Process[] myprocess = Process.GetProcessesByName("myweb");
            if (myprocess.Length > 0)
            {
                // myprocess[0].CloseMainWindow();
                // myprocess[0].Close();
            }
            else
            {
                Process.Start(@"D:\Go\src\myweb\myweb.exe");
            }
        }
    }
}


3)windowsService项目安装部署 (只要电脑上安装过.net,一般下面代码都可以,下面是我的.exe文件路径):  

C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe   D:\Go\src\myweb\myweb.exe