[开发笔记]-控制Windows Service服务运行

简介:

用代码实现动态控制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服务程序开发 - 酷小孩 - 博客园

 本文转自 酷小孩 博客园博客,原文链接: http://www.cnblogs.com/babycool/p/3571083.html ,如需转载请自行联系原作者


相关文章
|
1月前
|
安全 Windows
【Azure Cloud Service】在Windows系统中抓取网络包 ( 不需要另外安全抓包工具)
通常,在生产环境中,为了保证系统环境的安全和纯粹,是不建议安装其它软件或排查工具(如果可以安装,也是需要走审批流程)。 本文将介绍一种,不用安装Wireshark / tcpdump 等工具,使用Windows系统自带的 netsh trace 命令来获取网络包的步骤
71 32
|
1月前
|
网络安全 Windows
Windows server 2012R2系统安装远程桌面服务后无法多用户同时登录是什么原因?
【11月更文挑战第15天】本文介绍了在Windows Server 2012 R2中遇到的多用户无法同时登录远程桌面的问题及其解决方法,包括许可模式限制、组策略配置问题、远程桌面服务配置错误以及网络和防火墙问题四个方面的原因分析及对应的解决方案。
|
1月前
|
C# Windows
【Azure App Service】在App Service for Windows上验证能占用的内存最大值
根据以上测验,当使用App Service内存没有达到预期的值,且应用异常日志出现OutOfMemory时,就需要检查Platform的设置是否位64bit。
44 11
|
2月前
|
监控 Ubuntu Linux
视频监控笔记(五):Ubuntu和windows时区同步问题-your clock is behind
这篇文章介绍了如何在Ubuntu和Windows系统中通过设置相同的时区并使用ntp服务来解决时间同步问题。
83 4
视频监控笔记(五):Ubuntu和windows时区同步问题-your clock is behind
|
2月前
|
边缘计算 安全 网络安全
|
2月前
|
开发框架 .NET API
Windows Forms应用程序中集成一个ASP.NET API服务
Windows Forms应用程序中集成一个ASP.NET API服务
109 9
|
2月前
|
应用服务中间件 Shell PHP
windows系统配置nginx环境运行pbootcms访问首页直接404的问题
windows系统配置nginx环境运行pbootcms访问首页直接404的问题
|
2月前
|
监控 关系型数据库 MySQL
PowerShell 脚本编写 :自动化Windows 开发工作流程
PowerShell 脚本编写 :自动化Windows 开发工作流程
88 0
|
2月前
|
弹性计算 关系型数据库 网络安全
阿里云国际版无法连接和访问Windows服务器中的FTP服务
阿里云国际版无法连接和访问Windows服务器中的FTP服务
|
2月前
|
Ubuntu Linux Python
如何利用wsl-Ubuntu里conda用来给Windows的PyCharm开发
如何在WSL(Windows Subsystem for Linux)的Ubuntu环境中使用conda虚拟环境来为Windows上的PyCharm开发设置Python解释器。
201 0