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; using RestartService.Monitor; namespace RestartService { public partial class RestartService : ServiceBase { public RestartService() { InitializeComponent(); } protected override void OnStart(string[] args) { UDPServer.Start(); EmqxClientMonitor.monitor(); ServerMonitor.monitorServer(); EmqxPushMonitor.monitor(); Start(); } void Start() { 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() { } } }