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()
|
{
|
}
|
}
|
}
|