Yuan天空
Yuan天空
  • 我的主页
  • 博客随笔
  • 软件作品
    • TK精灵(进程守护)
    • 远程运维助手
    • DicomStoreSCU
    • TKOCR(离线OCR)
    • 更多...
  • 学习资源
  • 网址收藏
  • HTML模板
专注.NET开发技术领域
  1. 主页
  2. 博客
  3. 发布页

c# 实现windows服务程序的安装、启动、暂停以及卸载 等管理功能

C#windows服务程序安装启动
编程开发 2021-06-17 99
贴个广告
OCR识别软件/扫描版pdf转word/图片转换文字编辑/JPG转文字
Loading...
CT工作站图文DICOM胶片打印接收刻盘科室内PACS
Loading...
黑神话悟空/PS5光盘/豪华版/PS5光盘
Loading...
大疆云台OM6手持云台OM5升级版稳定器三轴增稳智能
Loading...
DICOM打印服务器软件DCM PrintSCP
Loading...
索尼轻薄版PS5 Slim国行数字版主机 黑神话悟空 家用电视游戏机
Loading...
博客正文

window服务程序的部署相对比较麻烦 我们可以通过程序实现自定义的安装管理程序来执行 以下是c#实现windows服务程序的安装、启动、暂停以及卸载 的功能代码实现

首先需要引用这两个dll类库

using System.Configuration.Install;
using System.ServiceProcess;

以下是封装方法

/// <summary>
    /// 本地服务集中管理
    /// </summary>
    public class ServiceManager
    {
        /// <summary>
        /// 服务主程序的文件地址
        /// </summary>
        public string ServiceFilePath { get; private set; }
        /// <summary>
        /// 服务名称
        /// </summary>
        public string ServiceName { get; private set; }

        public ServiceManager(string ServiceFilePath)
        {
            this.ServiceFilePath = ServiceFilePath;
            this.ServiceName = System.IO.Path.GetFileNameWithoutExtension(ServiceFilePath);
        }
 
        /// <summary>
        /// 判断服务是否存在
        /// </summary>
        /// <returns></returns>
        public bool IsExisted
        {
            get
            {
                ServiceController[] services = ServiceController.GetServices();
                return services.Count(e => e.ServiceName.ToLower() == ServiceName.ToLower())>0;
            }
        }

        /// <summary>
        /// 安装服务
        /// </summary>
        public void Install()
        {
            using (AssemblyInstaller installer = new AssemblyInstaller())
            {
                installer.UseNewContext = true;
                installer.Path = ServiceFilePath;
                IDictionary savedState = new Hashtable();
                installer.Install(savedState);
                installer.Commit(savedState);
            }
        }

        /// <summary>
        /// 卸载服务
        /// </summary>
        public void Uninstall()
        {
            using (AssemblyInstaller installer = new AssemblyInstaller())
            {
                installer.UseNewContext = true;
                installer.Path = ServiceFilePath;
                installer.Uninstall(null);
            }
        }

        /// <summary>
        /// 启动服务
        /// </summary>
        public void Start()
        {
            using (ServiceController control = new ServiceController(ServiceName))
            {
                if (control.Status == ServiceControllerStatus.Stopped)
                {
                    control.Start();
                }
            }
        }

        /// <summary>
        /// 获取服务状态
        /// </summary>
        /// <returns></returns>
        public ServiceControllerStatus Status
        {
            get
            {
                ServiceControllerStatus RunStatus = ServiceControllerStatus.Stopped;
                if (this.IsExisted)
                {
                    using (ServiceController control = new ServiceController(ServiceName))
                    {
                        RunStatus = control.Status;
                    }
                }
                return RunStatus;
            }
        }



        /// <summary>
        /// 获取服务名称
        /// </summary>
        /// <returns></returns>
        public string DisplayName
        {
            get
            {
                string displayName="??" ;
                if (this.IsExisted)
                {
                    using (ServiceController control = new ServiceController(ServiceName))
                    {
                        displayName = control.DisplayName;
                    }
                }
                return displayName;
            }
        }



        /// <summary>
        /// 停止服务
        /// </summary>
        public void Stop()
        {
            using (ServiceController control = new ServiceController(ServiceName))
            {
                if (control.Status == ServiceControllerStatus.Running)
                {
                    control.Stop();
                }
            }
        }

        public static void Uninstall(string xxxx)
        {
            using (AssemblyInstaller installer = new AssemblyInstaller())
            {
                installer.UseNewContext = true;
                installer.Path = xxxx;
                installer.Uninstall(null);
            }
        }
    }
同类文章
后端开发人员使用Vue框架好不好用?分享一下开发使用感想
Loading...
后端开发人员使用Vue框架好不好用?分享一下开发使用感想
AJAX上传Form表单内容和文件
Loading...
AJAX上传Form表单内容和文件
基于C#人名币基础加减法换算最终得出<元角分>的计算结果的实现
Loading...
基于C#人名币基础加减法换算最终得出<元角分>的计算结果的实现
Visual Studio 2013 (v120) vs项目重定向解决方案
Loading...
Visual Studio 2013 (v120) vs项目重定向解决方案
c#通过winAPI函数InternetGetConnectedState获得本地系统的网络连接状态
Loading...
c#通过winAPI函数InternetGetConnectedState获得本地系统的网络连接状态
WPF 数据转换器 IValueConverter例子
Loading...
WPF 数据转换器 IValueConverter例子
平时工作中经常用到的几种正则表达式写法
Loading...
平时工作中经常用到的几种正则表达式写法
WPF 使用MahApps.Metro
Loading...
WPF 使用MahApps.Metro
C# .NET中 使用GDI+ 添加图形水印
Loading...
C# .NET中 使用GDI+ 添加图形水印
C# 实现本地文件怎么转换成byte[] 进行读取操作
Loading...
C# 实现本地文件怎么转换成byte[] 进行读取操作
Web上传文件请求报错超过了最大请求长度
Loading...
Web上传文件请求报错超过了最大请求长度
C#怎么获取windows系统支持的字体以及字体样式
Loading...
C#怎么获取windows系统支持的字体以及字体样式
问题反馈/学习建议
1. 文明上网,理性表达,营造舒适的学习氛围
2. 请不要反馈提交与本页主题无关内容
学习资源
[人脸检测]基于C#OpenCvSharp+haarcascade人脸、人眼模型实现人脸检测源码
Loading...
[人脸检测]基于C#OpenCvSharp+haarcascade人脸、人眼模型实现人脸检测源码
visual studio 2019在线安装包和激活码密钥key
Loading...
visual studio 2019在线安装包和激活码密钥key
基于Wpf+MVVM实现的完整截图软件的框选区域效果源码
Loading...
基于Wpf+MVVM实现的完整截图软件的框选区域效果源码
C#基于ffmpeg.exe实现视频添加字幕转GIF表情包的源码
Loading...
C#基于ffmpeg.exe实现视频添加字幕转GIF表情包的源码
 远程控制软件Radmin3.4 中文完整版(控制端和被控端)
Loading...
远程控制软件Radmin3.4 中文完整版(控制端和被控端)
基于WPF实现系统桌面录制gif+批量添加水印工具源码
Loading...
基于WPF实现系统桌面录制gif+批量添加水印工具源码