C#控制Window服务的状态

最近想做这样一个效果,在网页控制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();
        }
    }
服务权限问题
  • 部署可能会遇到权限问题,如下:


  • 那么在可以修改应用程序池的标识,如下


  • 以上为个人遇到问题,仅供参考!
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,032评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,804评论 25 709
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,785评论 18 399
  • 在第N个人跑来问我鞋子哪里买的时候,我的内心是这个样子的。 去年买了两双“小脏鞋”Golden Goose。特别心...
    你野姐阅读 471评论 0 1
  • 万恶的律师终于更新了,怀着饥渴难耐的心情,我看完了首集,然后常舒一口气:果然没有辜负近一年的等待啊。 ...
    第六天魔阅读 473评论 0 0