界面操作如图
后端代码
using Newtonsoft.Json;
using System;
using System.Configuration;
using System.ServiceProcess;
using System.Threading;
using System.Xml;
namespace NewLightingCloudWeb
{
/// <summary>
/// 服务器控制类
/// </summary>
public class ServerControl
{
private static string ServiceName = ConfigurationManager.AppSettings["servername"];
private static string ServicePath = ConfigurationManager.AppSettings["ServicePath"];
private static string serverruntime = ConfigurationManager.AppSettings["serverruntime"];
/// <summary>
/// 获取服务信息
/// </summary>
/// <returns></returns>
public static string GetServerInfoNew()
{
Server sm = new Server();
sm.Name = ServiceName;
sm.Path = ServicePath;
if (string.IsNullOrEmpty(serverruntime))
{
sm.days = "获取上次启动时间异常";
}
else
{
DateTime oldtime;
if (DateTime.TryParse(serverruntime, out oldtime))
{
sm.days = "通讯服务已运行" + (DateTime.Now - oldtime).Days + "天";
}
else
{
sm.days = "时间转换失败";
}
}
sm.State = GetServerState(sm.Name);
return JsonConvert.SerializeObject(sm);
}
/// <summary>
/// 获取指定服务状态
/// </summary>
/// <param name="_ServerName">服务名称</param>
/// <returns></returns>
public static string GetServerState(string _ServerName)
{
string msg = "";
try
{
using (System.ServiceProcess.ServiceController control = new ServiceController(_ServerName))
{
try
{
switch (control.Status)
{
case ServiceControllerStatus.Stopped:
msg = ("服务已停止");
break;
case ServiceControllerStatus.StartPending:
msg = ("服务正在启动");
break;
case ServiceControllerStatus.StopPending:
msg = ("服务正在停止");
break;
case ServiceControllerStatus.Running:
msg = ("服务正在运行");
break;
case ServiceControllerStatus.ContinuePending:
msg = ("服务即将继续");
break;
case ServiceControllerStatus.PausePending:
msg = ("服务即将暂停");
break;
case ServiceControllerStatus.Paused:
msg = ("服务已暂停");
break;
default:
msg = ("服务状态未知");
break;
}
}
catch
{
msg = ("系统中不存在此服务");
}
}
}
catch (Exception ex) { msg = "获取服务状态异常:" + ex.Message; }
return msg;
}
/// <summary>
/// 启动指定服务
/// </summary>
/// <param name="_ServerName">服务名称</param>
/// <returns></returns>
public static string ServerStart(string _ServerName)
{
string msg = "启动服务";
string setting = "";
try
{
using (System.ServiceProcess.ServiceController control = new ServiceController(_ServerName))
{
if (control.Status == System.ServiceProcess.ServiceControllerStatus.Stopped)
{
control.Start();
msg = "启动服务成功";
setting = UpdateAppSetting();
}
else if (control.Status == System.ServiceProcess.ServiceControllerStatus.Paused)
{
control.Continue();
msg = "启动服务成功";
setting = UpdateAppSetting();
}
else if (control.Status == System.ServiceProcess.ServiceControllerStatus.Running)
{
msg = "启动服务成功";
setting = UpdateAppSetting();
}
}
}
catch (Exception ex) { msg = "启动服务异常:" + ex.Message; }
return msg + setting;
}
private static string UpdateAppSetting()
{
string setting = "";
try
{
string key = "serverruntime";
string value = DateTime.Now.ToString("yyyy-MM-dd");
XmlDocument doc = new XmlDocument();
//获得配置文件的全路径
string strFileName = AppDomain.CurrentDomain.BaseDirectory.ToString() + "Web.config";
doc.Load(strFileName);
//找出名称为“add”的所有元素
XmlNodeList nodes = doc.GetElementsByTagName("add");
for (int i = 0; i < nodes.Count; i++)
{
//获得将当前元素的key属性
XmlAttribute _key = nodes[i].Attributes["key"];
//根据元素的第一个属性来判断当前的元素是不是目标元素
if (_key != null)
{
if (_key.Value == key)
{
//对目标元素中的第二个属性赋值
_key = nodes[i].Attributes["value"];
_key.Value = value;
break;
}
}
}
//保存上面的修改
doc.Save(strFileName);
setting = "";
}
catch (Exception ex)
{
setting = "异常" + ex.Message;
}
return setting;
}
/// <summary>
/// 停止指定服务
/// </summary>
/// <param name="_ServerName">服务名称</param>
/// <returns></returns>
public static string ServerStop(string _ServerName)
{
string msg = "停止服务失败";
try
{
using (System.ServiceProcess.ServiceController control = new ServiceController(_ServerName))
{
if (control.Status == System.ServiceProcess.ServiceControllerStatus.Running)
{
control.Stop();
msg = "停止服务成功";
}
else if (control.Status == System.ServiceProcess.ServiceControllerStatus.Stopped)
{
msg = "停止服务成功";
}
}
}
catch (Exception ex) { msg = "停止服务异常:" + ex.Message; }
return msg;
}
/// <summary>
/// 重启指定服务
/// </summary>
/// <param name="_ServerName">服务名称</param>
/// <returns></returns>
public static string ServerRestart(string _ServerName)
{
string msg = "服务重启失败,请刷新页面重试";
try
{
if (ServerStop(_ServerName) == "停止服务成功")
{
msg = "服务停止成功,";
}
Thread.Sleep(1000);
ServerStart(_ServerName);
if (GetServerState(_ServerName) != "服务正在运行")
{
Thread.Sleep(1000);
ServerStart(_ServerName);
}
if (GetServerState(_ServerName) == "服务正在运行")
{
msg += "服务器启动成功;服务重启完成!";
}
else
{
msg += "当前服务状态" + GetServerState(_ServerName) + ";" + "服务器重启失败!";
}
}
catch (Exception ex) { msg = "服务重启异常:" + ex.Message; }
return msg;
}
}
/// <summary>
/// 服务信息
/// </summary>
public class Server
{
/// <summary>
/// 已运行天数
/// </summary>
public string days { get; set; }
/// <summary>
/// 监控名称
/// </summary>
public string ServiceMonitor { get; set; }
/// <summary>
/// 服务名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 服务路径
/// </summary>
public string Path { get; set; }
/// <summary>
/// 服务状态
/// </summary>
public string State { get; set; }
}
}
iis网站权限配置,找到对应应用程序池,设置标识为 LocalSystem
配置完毕之后就可以通过网站对服务进行操作了。