当前位置: 首页 > news >正文

用C#代码来安装、卸载、启动、关闭服务

 /// <summary>
        /// 启动服务
         /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            ServiceController sc = new ServiceController("WindowsService1");
            if (sc.Status.Equals(ServiceControllerStatus.Stopped))
            {
                sc.Start();
            }
        }
        /// <summary>
        /// 停止服务
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            ServiceController sc = new ServiceController("MSSQLSERVER");
            if (!sc.Status.Equals(ServiceControllerStatus.Stopped))
            {
                sc.Stop();
            }
        }
        /// <summary>
        /// 安装服务
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button3_Click(object sender, EventArgs e)
        {
            if (!isServiceIsExisted("Service1"))
            {                
                string location = System.Reflection.Assembly.GetExecutingAssembly().Location;
                string serviceFileName = location.Substring(0, location.LastIndexOf('//') + 1) + "WindowsService1.exe";

                InstallmyService(null, serviceFileName);
            }
            else
            {
                MessageBox.Show("系统已经安装了此服务!");
            }
        }
        /// <summary>
        /// 卸载服务
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button4_Click(object sender, EventArgs e)
        {
            if (isServiceIsExisted("Service1"))
            {
                string location = System.Reflection.Assembly.GetExecutingAssembly().Location;
                string serviceFileName = location.Substring(0, location.LastIndexOf('//') + 1) + "WindowsService1.exe";
                UnInstallmyService(serviceFileName);
            }
            else
            {
                MessageBox.Show("系统不存在此服务,不需要卸载!");
            }
        }


        /// <summary>
        /// 检查服务存在的存在性
        /// </summary>
        /// <param name=" NameService ">服务名</param>
        /// <returns>存在返回 true,否则返回 false;</returns>
        public static bool isServiceIsExisted(string NameService)
        {
            ServiceController[] services = ServiceController.GetServices();
            foreach (ServiceController s in services)
            {
                if (s.ServiceName.ToLower() == NameService.ToLower())
                {
                    return true;
                }
            }
            return false;
        }
        /// <summary>
        /// 安装Windows服务
        /// </summary>
        /// <param name="stateSaver">集合</param>
        /// <param name="filepath">程序文件路径</param>
        public static void InstallmyService(IDictionary stateSaver, string filepath)
        {
            AssemblyInstaller AssemblyInstaller1 = new AssemblyInstaller();
            AssemblyInstaller1.UseNewContext = true;
            AssemblyInstaller1.Path = filepath;
            AssemblyInstaller1.Install(stateSaver);
            AssemblyInstaller1.Commit(stateSaver);
            AssemblyInstaller1.Dispose();
        }
        /// <summary>
        /// 卸载Windows服务
        /// </summary>
        /// <param name="filepath">程序文件路径</param>
        public static void UnInstallmyService(string filepath)
        {
            AssemblyInstaller AssemblyInstaller1 = new AssemblyInstaller();
            AssemblyInstaller1.UseNewContext = true;
            AssemblyInstaller1.Path = filepath;
            AssemblyInstaller1.Uninstall(null);
            AssemblyInstaller1.Dispose();
        }

转载于:https://www.cnblogs.com/sddychj/p/5567210.html

相关文章:

  • 《java入门第一季》之TreeSet存储自定义对象并保证排序和唯一
  • 创建模仿存储库 Making a Mock Repository 精通ASP-NET-MVC-5-弗瑞曼 Listing 7-5
  • 《训练指南》——6.7
  • BadgeValueView
  • 64位win7下安装SQL Server 2008(图文解说版)
  • CSS3——让最后一行显示省略号
  • “前.NET Core时代”如何实现跨平台代码重用 ——程序集重用
  • 依赖注入框架:autofac
  • Educational Codeforces Round 13 E. Another Sith Tournament 状压dp
  • Python的模块与函数以及与自动化的结合
  • Visual Studio 2015+InstallShield 2015
  • C# XML与Json之间相互转换实例详解
  • S3C6410触摸屏驱动分析
  • BZOJ4488: [Jsoi2015]最大公约数
  • golang的linux安装
  • [nginx文档翻译系列] 控制nginx
  • 2017 前端面试准备 - 收藏集 - 掘金
  • Druid 在有赞的实践
  • flutter的key在widget list的作用以及必要性
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • HTML-表单
  • java8 Stream Pipelines 浅析
  • Leetcode 27 Remove Element
  • Less 日常用法
  • MaxCompute访问TableStore(OTS) 数据
  • npx命令介绍
  • Redis 懒删除(lazy free)简史
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • 聊聊flink的TableFactory
  • 每天10道Java面试题,跟我走,offer有!
  • 优化 Vue 项目编译文件大小
  • #1014 : Trie树
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (Ruby)Ubuntu12.04安装Rails环境
  • (定时器/计数器)中断系统(详解与使用)
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (原創) 未来三学期想要修的课 (日記)
  • (正则)提取页面里的img标签
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • ./configure,make,make install的作用(转)
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .Net Memory Profiler的使用举例
  • .NET与 java通用的3DES加密解密方法
  • //解决validator验证插件多个name相同只验证第一的问题
  • @RequestBody的使用
  • @Transactional类内部访问失效原因详解
  • [ solr入门 ] - 利用solrJ进行检索
  • [ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429