1. 程式人生 > >使用.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專案  (注意版本)  友情連結:windows服務簡單開發/安裝

核心程式碼:

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:\XXXX...XXXX\BdiaService.exe