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

9 篇文章 0 订阅

问题描述: 服务器注销后,所有与用户相关的正在运行的.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



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值