用代码实现动态控制Service服务运行状态。

效果图:

代码:

        #region 启动服务
/// <summary>
/// 启动服务
/// </summary>
/// <param name="scname"></param>
void XServiceStart(string scname)
{
ServiceController sc = new ServiceController(scname);
ServiceControllerStatus st = sc.Status;
switch (st)
{
case ServiceControllerStatus.StopPending:
case ServiceControllerStatus.Stopped:
sc.Start();//启动服务
//等待服务达到指定状态
sc.WaitForStatus(ServiceControllerStatus.Running);
break;
default:
break;
} }
#endregion #region 停止服务
/// <summary>
/// 停止服务
/// </summary>
/// <param name="scname"></param>
void XServiceStop(string scname)
{
ServiceController sc = new ServiceController(scname);
ServiceControllerStatus st = sc.Status;
switch (st)
{
case ServiceControllerStatus.Running:
case ServiceControllerStatus.StartPending:
case ServiceControllerStatus.Paused:
case ServiceControllerStatus.PausePending:
case ServiceControllerStatus.ContinuePending:
sc.Stop();
sc.WaitForStatus(ServiceControllerStatus.Stopped);
break;
default: break;
}
}
#endregion #region 暂停服务
/// <summary>
/// 暂停服务
/// </summary>
/// <param name="scname"></param>
void XServicePause(string scname)
{
ServiceController sc = new ServiceController(scname);
ServiceControllerStatus st = sc.Status;
switch (st)
{
case ServiceControllerStatus.Running:
case ServiceControllerStatus.StartPending:
sc.Pause();
sc.WaitForStatus(ServiceControllerStatus.Paused);
break;
default: break;
}
}
#endregion #region 继续服务
/// <summary>
/// 继续服务
/// </summary>
/// <param name="scname"></param>
void XServiceResume(string scname)
{
ServiceController sc = new ServiceController(scname);
ServiceControllerStatus st = sc.Status;
switch (st)
{
case ServiceControllerStatus.Paused:
case ServiceControllerStatus.PausePending:
sc.Continue();
sc.WaitForStatus(ServiceControllerStatus.Running);
break;
default: break;
}
} #endregion #region 判断服务当前的运行状态
/// <summary>
/// 判断服务当前的运行状态
/// </summary>
/// <param name="scname"></param>
/// <returns></returns>
string XServiceStatus(string scname)
{
ServiceController sc = new ServiceController(scname);
ServiceControllerStatus st = sc.Status;
string result = string.Empty;
switch (st)
{
case ServiceControllerStatus.Running:
//运行中
result = "运行中";
break;
case ServiceControllerStatus.Paused:
result = "已暂停";
break;
case ServiceControllerStatus.Stopped:
result = "已停止";
break;
case ServiceControllerStatus.ContinuePending:
result = "即将继续";
break;
case ServiceControllerStatus.PausePending:
result = "即将暂停";
break;
case ServiceControllerStatus.StartPending:
result = "正在启动";
break;
case ServiceControllerStatus.StopPending:
result = "正在停止";
break;
default:
result = "错误";
break;
}
return result;
} #endregion

对于Service服务的“开启”,“停止”操作,创建的Service服务程序默认是支持的。而“暂停”,“恢复”操作,需要在服务的属性中进行开启设置才可以。

CanPauseAndContinue          服务是否接受暂停或继续运行的请求

在win7及以上系统上操作时,需要以管理员身份运行才能操作Service服务,否则程序会异常。如何让程序获得管理员权限,可以查看我前一篇文章:

C#如何以管理员身份运行程序 - 酷小孩 - 博客园

对于Service服务程序的创建操作,可以查看我之前的文章:

[开发笔记]-WindowsService服务程序开发 - 酷小孩 - 博客园

转载请注明出处。

[开发笔记]-控制Windows Service服务运行的更多相关文章

  1. 震惊!Windows Service服务和定时任务框架quartz之间原来是这种关系……

    过场CG:   接到公司领导的文件指示,“小熊”需要在6月底去海外执行一个行动代号为[定时任务]的营救计划,这个计划关系到公司某个项目的生死(数据安全漏洞),作战部拟定两个作战方案: 方案一:使用务定 ...

  2. C# Windows Service服务的创建和调试

    前言 关于Windows服务创建和调试的文章在网络上的很多文章里面都有,直接拿过来贴在这里也不过仅仅是个记录,不会让人加深印象.所以本着能够更深刻了解服务项目的创建和调试过程及方法的目的,有了这篇记录 ...

  3. 管理员控制Windows Service

    C# 以管理员方式启动Winform,进而使用管理员控制Windows Service   问题起因: 1,) 问题自动分析Windows服务在正常运行时,确实会存在程序及人为原因导致该服务停止.为了 ...

  4. quartz.net结合Topshelf实现windows service服务托管的作业调度框架

    topshelf可以很简单方便的实现windows service服务,详见我的一篇博客的介绍 http://www.cnblogs.com/xiaopotian/articles/5428361.h ...

  5. .Net Windows Service(服务) 调试安装及System.Timers.Timer 使用

    Windows Service(服务)  是运行在后台的进程 1.VS建立 Windows 服务(.NET Framework) 2.添加Timer 双击Service1.cs可以拖控件(System ...

  6. Windows Service 服务搭配FluentScheduler实现定时任务调度

    Windows Service 服务 创建Windows Service 项目 创建一个Windows Service项目,并将项目名称改为 TaskWindowService 在解决方案资源管理器内 ...

  7. [开发笔记]-Windows Service服务相关注意事项

    注意一:报错:“本地计算机上的 *** 服务启动后停止.某些服务在未由其他服务或程序使用时将自动停止.” 该问题主要的原因是 Service服务程序中有错误. 遇到这个问题时,无论是重新安装服务,还是 ...

  8. 使用C#编程语言开发Windows Service服务

    转载-https://www.cnblogs.com/yubao/p/8443455.html Create Windows Service project using Visual Studio C ...

  9. war包部署在tomcat下,使用windows service服务方式启动tomcat服务器,在包含调用dll的模块,报dll找不到问题的解决办法

    问题描述: 开发了一个需要调用dll的java web程序,在idea开发环境下运行调试没问题,可以正常运行,在tomcat/bin下,运行批处理startup.bat,启动tomcat服务器,也可以 ...

随机推荐

  1. 关于boost的thread的mutex与lock的问题

    妈的,看了好久的相关的知识,感觉终于自己有点明白了,我一定要记下来啊,相关的知识呀.... 1, 也可以看一下boost的线程指南:http://wenku.baidu.com/link?url=E_ ...

  2. (七)shell编程学习

    1.shell程序练习:创建一个dir文件夹,在dir文件夹里再创建一个cd.c文件 首先vim hello.sh 2.shell中的变量定义和引用 (1)变量定义和初始化.shell是弱类型语言(语 ...

  3. Lua了解 & 为什么游戏开发用Lua

    参考这篇文章 https://www.zhihu.com/question/21717567 看来就是网易风云为了让人写外挂不方便而采用的冷门语言.当然冷门的语言不代表不好用啦. Lua 虚拟机小,嵌 ...

  4. Android 自定义列表指示器

    在联系人界面 可以看到这种界面 手指快速滑动右边滑动条时 可以显示相应的字母图标 android里提供了android.widget.SectionIndexer这个接口去实现该效果 可是只能显示字母 ...

  5. spring @ExceptionHandler注解方式实现异常统一处理

    首先,在我们的工程中新建BaseController父类,内容如下: package com.ztesoft.zsmartcity.framework.exception; import java.i ...

  6. word2010表格中的内容怎么设置行距

    选中表格,然后根据箭头指示点击 弹出如下对话框,选择行距

  7. js树目录结构

    jstree https://www.jstree.com/demo/ treejs http://www.treejs.cn/v3/demo.php#_206

  8. javascript之with的使用 弊端

    妹的,昨天都快写完了,一不小心点了个关闭,然后...就没有然后了 wordpress的自动保存功能咋就这么不靠谱呢 记得还在懵懂学习JavaScript基础之时,坊间便有传言“with语句是低效率语句 ...

  9. 20145218 《Java程序设计》第8周学习总结

    20145218 <Java程序设计>第8周学习总结 教材学习内容总结 15.1 日志 15.1.1日志API简介 java.util.logging包提供了日志功能相关类与接口,不必额外 ...

  10. [maven] 常用仓库地址

    共有的仓库 http://mvnrepository.com/ http://repo1.maven.org/maven2/ http://repository.jboss.com/maven2/ h ...