C#使用ServiceController控制Windows服务启停

一颗松果
一颗松果
发布时间:2026-10-13 | 3人浏览过
原创

本文详细解析如何在C#程序中通过ServiceController类控制Windows系统服务的启动与停止。主要包含准备工作、核心代码实现以及异常处理机制,帮助开发者快速集成服务管理功能。

实现原理与准备条件

要控制Windows服务,需要使用.NET Framework提供的System.ServiceProcess命名空间。核心类为ServiceController,它允许应用程序连接到本地或远程计算机上的服务并与其交互。

  • 依赖环境:确保项目引用了System.ServiceProcess.dll(在.NET Framework中默认引用,.NET Core/5+需安装NuGet包)。
  • 权限要求:操作系统服务通常需要管理员权限,程序应以管理员身份运行或配置相应的执行权限。
  • 关键属性:ServiceName用于指定目标服务,Status获取当前状态。

第1步:实现服务停止功能

目的:安全地关闭指定名称的服务,并确保其真正进入“已停止”状态后返回结果。

核心动作:创建ServiceController实例,调用Stop()方法,并使用WaitForStatus()阻塞等待。

/// <summary>
/// 停止服务
/// </summary>
private bool StopService(string StopServiceName)
{ 
 // 初始化服务对象
 ServiceController service = new ServiceController(StopServiceName); 
 try 
 { 
  // 发送停止指令
  service.Stop(); 
  // 等待服务状态变为 Stopped,防止立即返回导致的误判
  service.WaitForStatus(ServiceControllerStatus.Stopped); 
 } 
 catch(Exception) 
 {
  return false;
 }
 return true;
}

完成状态判断:若未抛出异常且成功等待至Stopped状态,返回true;否则捕获异常返回false。

第2步:实现服务启动功能

目的:启动指定名称的服务,并验证其是否成功进入“正在运行”状态。

核心动作:同样实例化ServiceController,调用Start(),然后等待Running状态。

/// <summary>
/// 开启服务
/// </summary>
private bool StartService(string StartServiceName) 
{ 
 ServiceController service = new ServiceController(StartServiceName); 
 try 
 { 
   // 发送启动指令
   service.Start(); 
   // 等待服务状态变为 Running
   service.WaitForStatus(ServiceControllerStatus.Running);
 } 
 catch (Exception)
 {
  return false;
 }
 return true;
}

注意:Start()可以传入参数数组以传递给服务的OnStart方法,但在上述基础示例中未使用参数。

注意事项与排错

  • 服务名称匹配:ServiceController构造函数中的名称必须是服务的内部名称(Service Name),而非显示名称。可通过注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services或命令提示符输入sc query查看准确名称。
  • 超时问题:部分服务启动较慢,WaitForStatus有默认超时时间。如果服务启动超过默认限制,可能会抛出InvalidOperationException。在生产环境中,建议设置合适的超时值或使用轮询检查。
  • 权限不足:如果程序没有管理员权限,调用Start()或Stop()将抛出异常,需在catch块中区分权限错误与其他错误。

总结

通过ServiceController类,C#开发者可以便捷地管理Windows服务的生命周期。StopService和StartService两个方法封装了标准的启动/停止逻辑,结合WaitForStatus确保了操作的可靠性。以上就是C#实现操作windows系统服务(service)的方法的详细内容,更多关于C#服务控制的技术资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表