[开发笔记]-控制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 ,如需转载请自行联系原作者


相关文章
|
9天前
|
C# Windows
【Azure App Service】在App Service for Windows上验证能占用的内存最大值
根据以上测验,当使用App Service内存没有达到预期的值,且应用异常日志出现OutOfMemory时,就需要检查Platform的设置是否位64bit。
32 11
|
1月前
|
监控 Ubuntu Linux
视频监控笔记(五):Ubuntu和windows时区同步问题-your clock is behind
这篇文章介绍了如何在Ubuntu和Windows系统中通过设置相同的时区并使用ntp服务来解决时间同步问题。
64 4
视频监控笔记(五):Ubuntu和windows时区同步问题-your clock is behind
|
1月前
|
边缘计算 安全 网络安全
|
1月前
|
开发框架 .NET API
Windows Forms应用程序中集成一个ASP.NET API服务
Windows Forms应用程序中集成一个ASP.NET API服务
90 9
|
1月前
|
应用服务中间件 Shell PHP
windows系统配置nginx环境运行pbootcms访问首页直接404的问题
windows系统配置nginx环境运行pbootcms访问首页直接404的问题
|
1月前
|
应用服务中间件 Apache Windows
免安装版的Tomcat注册为windows服务
免安装版的Tomcat注册为windows服务
111 3
|
1月前
|
Java 关系型数据库 MySQL
java控制Windows进程,服务管理器项目
本文介绍了如何使用Java的`Runtime`和`Process`类来控制Windows进程,包括执行命令、读取进程输出和错误流以及等待进程完成,并提供了一个简单的服务管理器项目示例。
35 1
|
1月前
|
监控 关系型数据库 MySQL
PowerShell 脚本编写 :自动化Windows 开发工作流程
PowerShell 脚本编写 :自动化Windows 开发工作流程
30 0
|
1月前
|
弹性计算 关系型数据库 网络安全
阿里云国际版无法连接和访问Windows服务器中的FTP服务
阿里云国际版无法连接和访问Windows服务器中的FTP服务
|
1月前
|
Ubuntu Linux Python
如何利用wsl-Ubuntu里conda用来给Windows的PyCharm开发
如何在WSL(Windows Subsystem for Linux)的Ubuntu环境中使用conda虚拟环境来为Windows上的PyCharm开发设置Python解释器。
67 0