C#检查服务状态,以及进行服务启停

1. linux环境

linux环境通过执行bash命令直接执行:

public string RunCmdLinux(string cmd)
        {
            var proc = new Process();
            System.Console.Write($"Run Linux cmd ==> [{cmd}]   START!");
            proc.StartInfo.CreateNoWindow = true;
            proc.StartInfo.FileName = "/bin/bash";
            proc.StartInfo.UseShellExecute = false;
            proc.StartInfo.RedirectStandardError = true;
            proc.StartInfo.RedirectStandardInput = true;
            proc.StartInfo.RedirectStandardOutput = true;
            proc.Start();
            proc.StandardInput.WriteLine(cmd);
            proc.StandardInput.WriteLine("exit");
            string outStr = proc.StandardOutput.ReadToEnd();
            proc.Close();
            System.Console.Write($"Run Linux cmd ==> [{cmd}]   FINISHED!");
            return outStr;
        }

2. window环境

windows使用 System.ServiceProcess依赖下的ServiceController进行操作,具体代码:

        /// <summary>
        /// 开启windows服务
        /// </summary>
        /// <param name="serviceName"></param>
        /// <returns></returns>

        public bool StartWindowsService(string serviceName)
        {
            bool isbn = false;
            try
            { 
                ServiceController star_service = new ServiceController(serviceName);
                if (star_service.Status != ServiceControllerStatus.Running &&
                star_service.Status != ServiceControllerStatus.StartPending)
                {
                    star_service.Start();

                    for (int i = 0; i < 60; i++)
                    {
                        star_service.Refresh();
                        System.Threading.Thread.Sleep(1000);
                        if (star_service.Status == ServiceControllerStatus.Running)
                        {
                            isbn = true;
                            break;
                        }
                        if (i == 59)
                        {
                            isbn = false;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                System.Console.Write("[StartWindowsService] Error", ex);
                return false;
            }
            System.Console.Write($"[StartWindowsService]_serviceName:{serviceName},status:{isbn}");
            return isbn;
        }

        /// <summary>
        /// 关闭windows服务
        /// </summary>
        /// <param name="serviceName"></param>
        /// <returns></returns>
        public bool StopWindowsService(string serviceName)
        {
            bool isbn = false;
            try
            {
                ServiceController star_service = new ServiceController(serviceName);
                System.Console.WriteLine(star_service.Status);
                if (star_service.Status == ServiceControllerStatus.Running)
                {
                    star_service.Stop();
                }
                for (int i = 0; i < 60; i++)
                {
                    star_service.Refresh();
                    System.Threading.Thread.Sleep(1000);
                    if (star_service.Status == ServiceControllerStatus.Running)
                    {
                        isbn = true;
                        break;
                    }
                    if (i == 59)
                    {
                        isbn = false;
                    }
                }
            }
            catch (Exception ex)
            {
                System.Console.Write("[StopWindowsService] Error", ex);
                isbn = false;
            }
            System.Console.Write($"[StopWindowsService]_serviceName:{serviceName},status:{isbn}");
            return isbn;
        }

        /// <summary>
        /// 获取windows服务的状态
        /// </summary>
        /// <param name="serviceName">服务名</param>
        /// <returns>服务的状态</returns>
        public string CheckWindowsServiceStatus(string serviceName) {
            var services = ServiceController.GetServices();
            string serviceStatu = string.Empty;
            bool isServiceExist = false;
            foreach (var s in services)
            {
                if (s.ServiceName.ToLower().Equals(serviceName.ToLower()))
                {
                    System.Console.Write($"[CheckWindowsServiceStatus] serviceName:{serviceName},serviceStatus:{s.Status}");
                    isServiceExist = true;
                    serviceStatu = s.Status.ToString();
                    break;
                }
            }

            if (!isServiceExist)
            {
                System.Console.Write($"[CheckWindowsServiceStatus] serviceName:${serviceName} not instal");
                serviceStatu = "Service is not installed";
            }
            return serviceStatu;
        }

当服务不能停止时,还可根据服务名,通过进程进行杀死:

 /// <summary>
        /// 通过服务的名称查询进程号,进行杀死
        /// </summary>
        /// <param name="threadName">服务名称</param>
        /// <returns></returns>
        public void ThreadKillExitis(string threadName)
        { 
            Process[] processList = Process.GetProcesses();
            foreach (Process process in processList)
            {
                if (process.ProcessName.ToLower() == threadName.ToLower())
                {
                    process.Kill(); 
                }
            }
            System.Console.Write($"[ThreadKillExitis]_{threadName} 成功");
        }

权限配置:

由于windows环境运行需要获取系统权限,因此需要设置app.manifest内容。
首先右键项目->属性->安全性下勾选启用ClickOnce安全设置,会默认增加一个app.manifest文件。
在这里插入图片描述
打开后,将<requestedExecutionLevel level="asInvoker" uiAccess="false" />修改为<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

在这里插入图片描述
完成后,右键项目->属性->安全性下取消勾选启用ClickOnce安全设置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/151440.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

TOUGH系列软件教程

查看原文>>>全流程TOUGH系列软件实践技术应用 TOUGH系列软件是由美国劳伦斯伯克利实验室开发的&#xff0c;旨在解决非饱和带中地下水、热运移的通用模拟软件。和传统地下水模拟软件Feflow和Modflow不同&#xff0c;TOUGH系列软件采用模块化设计和有限积分差网格剖分…

『C++成长记』C++入门——内联函数

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;C &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、内联函数 &#x1f4d2;1.1内联函数的概念 &#x1f4d2;1.2内联函数的特征 …

js中的instance,isPrototype和getPrototypeOf的使用,来判断类的关系

&#x1f601; 作者简介&#xff1a;一名大四的学生&#xff0c;致力学习前端开发技术 ⭐️个人主页&#xff1a;夜宵饽饽的主页 ❔ 系列专栏&#xff1a;JavaScript小贴士 &#x1f450;学习格言&#xff1a;成功不是终点&#xff0c;失败也并非末日&#xff0c;最重要的是继续…

网络类型及数据链路层的协议

网络类型 --- 根据数据链路层使用的协议来进行划分的。 MA网络 --- 多点接入网络 BMA --- 广播型多点接入网络---以太网协议 NBMA --- 非广播型多点接入网络 以太网协议 --- 需要使用mac地址对不同的主机设备进行区分和标识 --- 以太网之所以需要使用mac地址进行数据寻址&…

基于SSM的校园停车场管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

Adobe Illustrator——原创设计的宝藏软件

今天&#xff0c;我们来谈谈一款在Adobe系列中曾经多次给大家都提到的原创性极强的设计理念丰富的矢量图形编辑软件——Adobe Illustrator。 Adobe Illustrator&#xff0c;其定位是一款与Photoshop相类似对矢量图形进行编辑的软件。 Adobe Illustrator&#xff0c;作为全球最著…

未来10年,NAND 与DRAM依然是存储主角

根据Yole Group调查机构的数据显示&#xff0c;在2022年独立记忆体&#xff08;Stand-alone Memory&#xff09;整体市场达到了1440亿美元。其中DRAM占比55.4%&#xff0c;NAND占比40.8%。剩下的NOR、(NV)SRAM/FRAM、EEPROM、新型非易失存储(PCM, ReRAM and STT-MRAM)等占比3.8…

2023.11.14 关于 Spring Boot 创建和使用

目录 Spring Boot Spring Boot 项目的创建 网页版创建 Spring Boot 项目 Spring Boot 目录说明 项目运行 Spring Boot Spring Boot 是基于 Spring 设计的一个全新的框架&#xff0c;其目的是用来简化 Spring 的应用、初始搭建、开发的整个过程Spring Boot 就是一个整合了…

C语言入门这一篇就够了(入门篇2)

接上篇C语言入门这一篇就够了&#xff08;入门篇1&#xff09; 今天主要讲解基本语法&#xff0c;话不多说&#xff0c;直接上干货。 C语言语法有哪些 数据类型&#xff1a;C语言有多种数据类型&#xff0c;包括整数类型&#xff08;如 int、long&#xff09;、浮点类型&#x…

移动机器人路径规划(二)--- 图搜索基础,Dijkstra,A*,JPS

目录 1 图搜索基础 1.1 机器人规划的配置空间 Configuration Space 1.2 图搜索算法的基本概念 1.3 启发式的搜索算法 Heuristic search 2 A* Dijkstra算法 2.1 Dijkstra算法 2.2 A*&&Weighted A*算法 2.3 A* 算法的工程实践中的应用 3 JPS 1 图搜索基础 1.1…

Mysql中的JDBC编程

JDBC编程 1.JDBC的数据库编程2.JDBC工作原理3.JDBC使用3.1JDBC开发案例3.2JDBC使用步骤总结 4.JDBC API4.1数据库连接Connection4.2 Statement对象4.3 ResultSet对象4.4 释放 5.Java代码操作数据库 1.JDBC的数据库编程 JDBC&#xff0c;即Java Database Connectivity&#xff0…

20 - 欲知JVM调优先了解JVM内存模型

从今天开始&#xff0c;我将和你一起探讨 Java 虚拟机&#xff08;JVM&#xff09;的性能调优。JVM 算是面试中的高频问题了&#xff0c;通常情况下总会有人问到&#xff1a;请你讲解下 JVM 的内存模型&#xff0c;JVM 的性能调优做过吗&#xff1f; 1、为什么 JVM 在 Java 中…

springboot--单元测试

单元测试 前言1、写测试要用的类2、写测试要用的类3、运行测试类4、spring-boot-starter-test默认提供了以下库4.1 junit54.1.1 DisplayName:为测试类或者测试方法设置展示名称4.1.2 BeforeAll&#xff1a;所有测试方法运行之前先运行这个4.1.3 BeforeEach&#xff1a;每个测试…

编码自动化:使用MybatisX初体验,太爽了!

使用Mybatis当前最火的插件&#xff1a;MybatisX。 在IDEA中安装MyBatisX插件。 该插件主要功能如下&#xff1a; 生成mapper xml文件 快速从代码跳转到mapper及从mapper返回代码 mybatis自动补全及语法错误提示 集成mybatis Generate GUI界面 根据数据库注解&#xff0c;…

win11无损关闭系统更新

1、窗口键R&#xff0c;打开运行窗口&#xff0c;输入regedit。 2、打开地址&#xff1a;计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings 3、新建DWORD&#xff08;32位&#xff09;值(D)&#xff0c;重命名“FlightSettingsMaxPauseDays” 4、…

MacBook投屏到安卓电视的操作步骤,用网页浏览器也能投屏

如果你想将苹果电脑投屏到家里的安卓大电视上&#xff0c;AirDroid Cast给你提供两种方法&#xff0c;其中一种就是大家都熟悉的AirPlay&#xff0c;AirPlay有个限制&#xff0c;需要连接同一个网络才可以投屏&#xff0c;所以AirPlay适应本地投屏。如果你需要远程投屏&#xf…

通信原理板块——利用香农公式对连续信道的信道容量计算

微信公众号上线&#xff0c;搜索公众号小灰灰的FPGA,关注可获取相关源码&#xff0c;定期更新有关FPGA的项目以及开源项目源码&#xff0c;包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 利用香农公式对连续信道的信道容量…

JS-项目实战-编辑单价单元格,可以点击单价单元格并且出现文本框,并自动选中输入框内部的文本

1、鼠标悬浮和离开事件.js //当页面加载完成后执行后面的匿名函数 window.onload function () {//get:获取 Element:元素 By:通过...方式//getElementById()根据id值获取某元素let fruitTbl document.getElementById("fruit_tbl");//table.rows:获取这个表格…

java 自定义收款二维码,使用图片融合,自定义文字

1, 输出 原图资源 : 下载原图, CSDN 下载, 无需积分 模版 底图 768 x 1299 二维码 527*527 2 代码 import javax.imageio.ImageIO; import java.awt.*; import java.awt.font.FontRenderContext; import java.awt.image.BufferedImage; import java.io.File; import java.…

基于STC12C5A60S2系列1T 8051单片机的SPI总线器件数模芯片TLC5615实现数模转换应用

基于STC12C5A60S2系列1T 8051单片的SPI总线器件数模芯片TLC5615实现数模转换应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍SPI总线器件数模芯片TLC5615介绍通过按…