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

https://blog.csdn.net/zhifeiya/article/details/41776641

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

核心代码:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Diagnostics;
  6. using System.Linq;
  7. using System.ServiceProcess;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Timers;
  11. namespace BdiaService
  12. {
  13. public partial class Bdia : ServiceBase
  14. {
  15. public Bdia()
  16. {
  17. InitializeComponent();
  18. }
  19. /// <summary>
  20. /// 服务启动的时候 调用的函数
  21. /// </summary>
  22. /// <param name="args"></param>
  23. protected override void OnStart(string[] args)
  24. {
  25. Check2();//启动myweb应用程序
  26. Timer t1 = new Timer(60000);
  27. t1.Elapsed += new ElapsedEventHandler(Check);//每隔1分钟检查一次
  28. t1.Start(); // 启动计时器。
  29. }
  30. /// <summary>
  31. /// 服务停止的时候,关闭已经启动的myweb
  32. /// </summary>
  33. protected override void OnStop()
  34. {
  35. Process[] myprocess = Process.GetProcessesByName("myweb");
  36. if (myprocess.Length > 0)
  37. {
  38. myprocess[0].CloseMainWindow();
  39. myprocess[0].Close();
  40. }
  41. }
  42. /// <summary>
  43. /// 计时器执行函数
  44. /// </summary>
  45. /// <param name="o"></param>
  46. /// <param name="e"></param>
  47. public void Check(Object o, ElapsedEventArgs e)
  48. {
  49. Process[] myprocess = Process.GetProcessesByName("myweb");//获取名字为myweb的进程
  50. if (myprocess.Length > 0)//如果存在,说明已经启动
  51. {
  52. //关闭
  53. // myprocess[0].CloseMainWindow();
  54. // myprocess[0].Close();
  55. }
  56. else//否则 启动myweb.exe
  57. {
  58. Process.Start(@"D:\Go\src\myweb\myweb.exe");
  59. }
  60. }
  61. public void Check2()
  62. {
  63. Process[] myprocess = Process.GetProcessesByName("myweb");
  64. if (myprocess.Length > 0)
  65. {
  66. // myprocess[0].CloseMainWindow();
  67. // myprocess[0].Close();
  68. }
  69. else
  70. {
  71. Process.Start(@"D:\Go\src\myweb\myweb.exe");
  72. }
  73. }
  74. }
  75. }

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

  1. C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe D:\XXXX...XXXX\BdiaService.exe
ft_authoradmin  ft_create_time2018-03-28 10:32
 ft_update_time2018-03-28 10:35