最近想做这样一个效果,在网页控制Window服务启动和停止和状态:
添加引用
- Window服务在程序集System.ServiceProcess,然后增加using System.ServiceProcess;
- 服务有几个状态,它是枚举类型,如下:
//
// 摘要:
// 服务未运行。这对应于 Win32 SERVICE_STOPPED 常数,该常数定义为 0x00000001。
Stopped = 1,
//
// 摘要:
// 服务正在启动。这对应于 Win32 SERVICE_START_PENDING 常数,该常数定义为 0x00000002。
StartPending = 2,
//
// 摘要:
// 服务正在停止。这对应于 Win32 SERVICE_STOP_PENDING 常数,该常数定义为 0x00000003。
StopPending = 3,
//
// 摘要:
// 服务正在运行。这对应于 Win32 SERVICE_RUNNING 常数,该常数定义为 0x00000004。
Running = 4,
//
// 摘要:
// 服务即将继续。这对应于 Win32 SERVICE_CONTINUE_PENDING 常数,该常数定义为 0x00000005。
ContinuePending = 5,
//
// 摘要:
// 服务即将暂停。这对应于 Win32 SERVICE_PAUSE_PENDING 常数,该常数定义为 0x00000006。
PausePending = 6,
//
// 摘要:
// 服务已暂停。这对应于 Win32 SERVICE_PAUSED 常数,该常数定义为 0x00000007。
Paused = 7
更新服务类
- 代码如下
public static class WindowService
{
private const string SERVICE_NAME = "Fax"; //服务名称
/// <summary>
/// 获取Window服务状态
/// </summary>
/// <returns></returns>
public static ServiceControllerStatus GetWinServiceState()
{
ServiceController sc = new ServiceController(SERVICE_NAME);
return sc.Status;
}
/// <summary>
/// 停止Window服务
/// </summary>
public static void StopWinService()
{
ServiceController sc = new ServiceController(SERVICE_NAME);
sc.Stop();
}
/// <summary>
/// 启动Window服务
/// </summary>
public static void StartWinService()
{
ServiceController sc = new ServiceController(SERVICE_NAME);
sc.Start();
}
/// <summary>
/// 启动Window服务
/// </summary>
public static void RestoreWinService()
{
ServiceController sc = new ServiceController(SERVICE_NAME);
sc.Refresh();
}
}
服务权限问题
-
部署可能会遇到权限问题,如下:
-
那么在可以修改应用程序池的标识,如下
- 以上为个人遇到问题,仅供参考!
网友评论