windows服务,配置程序随系统启动
高胜
2023-03-27 878a8904e0eeb773ba661ba6496413b474b1b1aa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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;
using System.Configuration;
 
namespace RestartService
{
    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }
 
        protected override void OnStart(string[] args)
        {
            var t = new Timer(1000 * 10);//实例化Timer类,设置间隔时间为10秒;
            t.Elapsed += (object source, System.Timers.ElapsedEventArgs e) =>
            {
                //获取所有服务列表
                var services = ServiceController.GetServices().ToList();
                //找到指定程序
                var service = services.Where(d => d.ServiceName == ConfigurationManager.AppSettings["RunAfter"].ToString()).FirstOrDefault();
                //指定程序正在运行后才进入程序启动
                if (service.Status == ServiceControllerStatus.Running)
                {
                    var serviceNames = ConfigurationManager.AppSettings["Servers"].ToString();
                    foreach (var item in serviceNames.Split(','))
                    {
                        try
                        {
                            var processNames = Process.GetProcessesByName(item);
                            if (processNames.Length == 0)
                            {
                                var servicePath = ConfigurationManager.AppSettings[item].ToString();
                                //创建启动对象
                                ProcessStartInfo startInfo = new ProcessStartInfo();
                                startInfo.UseShellExecute = true;
                                startInfo.WorkingDirectory = Environment.CurrentDirectory;
                                startInfo.FileName = servicePath;//@"E:\公司项目\服务器代码\转发服务器\Server\Server\Server\bin\Release\Server.exe";
                                                                 //设置启动动作,确保以管理员身份运行
                                startInfo.Verb = "runas";
 
                                Process.Start(startInfo);
                            }
                        }
                        catch (Exception ex)
                        {
                            System.IO.File.AppendAllText(@"D:\LogsRestart.txt", item + "启动异常\r\n\r\n");
                        }
                    }
                }
            };//到达时间的时候执行事件;
            t.AutoReset = true;//设置是执行一次(false)还是一直执行(true);
            t.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件;
        }
 
        protected override void OnStop()
        {
        }
    }
}