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

news/2024/7/8 3:00:59 标签: 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安全设置


http://www.niftyadmin.cn/n/5194897.html

相关文章

自动驾驶学习笔记(九)——车辆控制

#Apollo开发者# 学习课程的传送门如下&#xff0c;当您也准备学习自动驾驶时&#xff0c;可以和我一同前往&#xff1a; 《自动驾驶新人之旅》免费课程—> 传送门 《Apollo Beta宣讲和线下沙龙》免费报名—>传送门 文章目录 前言 控制器设计 比例积分微分控制 线性…

java拼图游戏(待优化)

启动类 package com.yx.ui;public class App { //启动入口public static void main(String[] args) {//如果想要开启一个界面&#xff0c;就创建谁的对象 // new DengJFrame(); // new ZCJFrame();new GameJFrame();}}游戏类 package com.yx.ui;import java.awt.event.KeyEv…

JDK1.5 新特性【反射】

前言 今天复习一下反射&#xff0c;说是复习&#xff0c;基本上已经忘干净了&#xff0c;只知道用Spring、Mybatis、JavaFX 的时候加个注解&#xff0c;具体原理就不知道了。所以必须再深入学习一下。 1、设计一个框架&#xff1f; 设计一个框架需要什么技术&#xff1f; 反…

ESP32 Arduino实战协议篇-低功耗蓝牙 (BLE)

ESP32 不仅配备 Wi-Fi,还配备蓝牙和低功耗蓝牙 (BLE)。这篇文章简要介绍了 ESP32 的 BLE。首先,我们将探讨什么是 BLE 以及它的用途,然后我们将使用 Arduino IDE 查看 ESP32 的一些示例。为了简单介绍,我们将创建一个 ESP32 BLE 服务器,以及一个用于查找该服务器的 ESP32 …

SpringBoot中日志的使用log4j

SpringBoot中日志的使用log4j 项目中日志系统是必不可少的&#xff0c;目前比较流行的日志框架有 log4j、logback 等&#xff0c;这两个框架的作者是同一个 人&#xff0c;Logback 旨在作为流行的 log4j 项目的后续版本&#xff0c;从而恢复 log4j 离开的位置。 另外 slf4j(…

INFINI Labs 产品更新 | 发布 Easysearch Java 客户端,Console 支持 SQL 查询等功能

近年来&#xff0c;日志管理平台越来越流行。使用日志管理平台可以实时地、统一地、方便地管理和查看日志&#xff0c;挖掘日志数据价值&#xff0c;驱动运维、运营&#xff0c;提升服务管理效率。 方案架构 Beats 是轻量级采集器&#xff0c;包括 Filebeat、Metricbeat 等。E…

IC设计企业,如何安全、可控、高效的传输设计文档和研发数据?

近年来&#xff0c;半导体的应用领域不断拓展&#xff0c;在全球经济和社会发展中的重要性与日俱增&#xff0c;半导体芯片是数字经济的核心&#xff0c;承载着现代产业发展&#xff0c;具有举足轻重的价值。从半导体行业的角度&#xff0c;IC设计是关键的一环&#xff0c;我国…

Halcon (5):Halcon Solution Guide I basics 导论解析

文章目录 文章专栏前言文章目录翻译文档的说明 结论LOL比赛结局 文章专栏 Halcon开发 前言 今天开始看Halcon的官方文档。由于市面上的教学主要是以基础的语法&#xff0c;算子简单介绍为主。所以我还是得看官方的文本。别的不多说了。有道词英语词典&#xff0c;启动。 还有…