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

C#获得服务,判断服务状态,启动服务 C#获取服务 C#获取服务状态 C#判断服务状态 C#监听服务状态 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安全设置

linux与C#服务器的通信(测试成功) 采集端程序运行的有错误的,因为我把好多部分的代码去掉了,但是大体框架还在,各位稍微动动脑子就可以实现了。祝各位成功! 阅读详情

相关推荐

C#实现用托盘控制windows服务的

这个例子既实现了系统托盘功能,也实现了多windows服务的控制,非常实用!using System;namespace UBISerialsController{ ///  /// Class1 的摘要说明。 ///  public class Class1 {  static System.ServiceProcess.ServiceController sc;  static Sys

rosekisser的专栏 2373

C# 判断某个Windows服务是否启动

调用方法:           // 定义"MSSQLSERVER"服务         ServiceController sc = new ServiceController("MSSQLSERVER");         if (false == IsServiceControllerStart(sc))         {             sc.Start();   

苒橪 1670

C#Worker Service征服Linux:从零到部署英雄的跨界之旅

恭喜你,成功将C# Worker Service部署到了Linux上,实现了从Windows到Linux的无缝跨越!现在,你的服务不仅能享受到Linux系统的稳定与高效,还能在开源世界的广阔天地中自由驰骋。这不仅是一次部署的胜利,更是技术灵活性与跨平台能力的一次展现。继续保持那份对技术的热爱与好奇,让我们在编程的征途中,不断探索,不断前行!

java专栏 1392

C# Windows服务实战:3行代码实现无黑框安装与启停(附完整源码)

本文介绍了一种创新的C# Windows服务封装方案,仅需3行核心代码即可实现服务的无黑框安装与启停,彻底解决传统方式依赖命令行工具、权限要求高的问题。通过DLL导入和权限配置清单,开发者可以轻松集成到图形界面中,提升企业级应用的后台服务管理效率。

weixin_33713707的博客 330

C#微服务健康检查的‘三重防御’:为什么你的服务在‘装死’?

健康检查是‘防御工事’,需要ASP.NET Core和依赖库支持!像‘巫师的盾牌’一样坚固!“手动检查10个服务要1小时,自动检查只需1秒!因为机器是‘不知疲倦的巫师’!“判断服务是否‘可接受流量’,避免‘带病工作’!像‘健康体检报告’!开放访问权限,像‘解除防御阵法的禁锢’!“判断服务是否‘存活’,用于自动重启!检查依赖注入是否完成!像‘符咒是否贴对位置’!接口检测服务状态,像‘巫师的诊断咒’!配置路由,像‘巫师启动防御阵法’!“健康检查要‘精准打击’!设置间隔,像‘冷却时间’!“健康检查要‘生效’!

java专栏 889

VB.NET写的Windows服务启停控制工具,带完整VS工程和核心服务管理代码

一个开箱即用的VB.NET Windows服务管理小工具,能直接启动、停止、暂停、继续、重启本地系统中的任意Windows服务。整个项目基于.NET Framework开发,使用标准ServiceController类与系统服务交互,不依赖第三方库。压缩包里有完整的Visual Studio解决方案(WindowsApplication1.sln)、项目源文件、.suo用户配置,以及独立封装的服务操作模块(WindowsServicesCode目录),所有代码在VS2015及以上版本中可直接打开、编译、运行

196

C#检查服务状态和启动关闭服务

WinForm 判断服务状态,显示服务名称和状态 https://blog.youkuaiyun.com/u013063880/article/details/78626200 C#获得服务,判断服务状态,启动服务 https://blog.youkuaiyun.com/da_keng/article/details/50384914...

weixin_33856370的博客 951

Cjwdev.WindowsApi库:C#中服务管理和窗口交互的实现方法

在现代的软件开发中,Windows API (应用程序接口) 是构建与Windows操作系统交互程序的基础。它为开发者提供了丰富的接口,用于访问系统底层服务、硬件资源和执行复杂的操作任务。然而,直接使用Windows API对于开发者来说既复杂又耗时,因此存在像Cjwdev.WindowsApi这样的库,它封装了这些底层API,以简化开发者的工作。

weixin_31419153的博客 1127

C#开发Windows服务守护程序

C#开发Windows服务守护程序背景实现关键C#编程判断指定的Windows服务是否存在C#编程获取指定Windows服务状态C#编程实现服务安装、启动、停止、卸载 背景 通常为了便于对指定Windows服务进行方便的管理,我们会开发一个守护程序,或者叫做服务管理的工具,基本要实现windows服务的安装、卸载、启动、停止。 实现关键 System.ServiceProcess.ServiceC...

分享技术,传播知识! 2247

USB 3.0 高清音视频采集芯片——MS2130

MS2130 是一款 USB 3.0 高清视频和音频采集芯片,内部集成 USB3.0 Device 控制器、数据收发模块、音视频处理模块。

YOU_SeMi的博客 7858

逆变器专题(6)-正负序分离(二阶广义积分器DSOGI)

相应仿真原件请移步资源下载DSOGI作为一种常用的正负序分离方法,其可以在电压三相不平衡的状态下实现较为精准的锁相环。

cyc19980105的博客 8803

DevPod健康检查:服务状态监控终极指南

DevPod作为一款开源的云开发环境管理工具,提供了类似于GitHub Codespaces的功能,但完全基于客户端且保持开放中立。它支持任何IDE,并能与各种云服务、Kubernetes或本地Docker环境协同工作。本文将详细介绍如何通过DevPod的健康检查功能,全面监控工作区状态,确保开发环境稳定运行。 ## 为什么健康检查对DevPod至关重要? 在使用DevPod进行开发时,工作区

gitblog_01082的博客 867

芒果YOLO11改进146:OBB旋转检测头Head篇:即插即用|轻量化非对称多级压缩LOADH旋转检测头,原创改进适配YOLOv8高效检测头,检测头新颖改进,全网首发独一份

OBB旋转检测头Head篇:即插即用|轻量化非对称多级压缩LOADH旋转检测头,原创改进适配YOLOv8高效检测头,检测头新颖改进,全网首发独一份

包括YOLOv5、YOLOv7、YOLOv8等模型改进 641

在C#中,我们可以利用以下方法判断Windows服务是否存在

  在C#中,我们可以利用以下方法判断Windows服务是否存在          private bool IsServiceExisted(string serviceName)  {  ServiceController[] services = ServiceController.GetServices();  foreach (ServiceController s in servi...

chh19941125的专栏 2849

微信小程序 - 解决报错 {“errcode“:41002,“errmsg“:“appid missing, rid: X“} 微信报错错误码errcode“:41002问题分析及解决教程(详细排查)

【微信小程序】报错{“errcode“:41002,“errmsg“:“appid missing, rid: 64e55770-67c1fb7e-027c5a70“}:【微信小程序】微信小程序登录请求出现appid missing提示,微信公众号{"errcode":41002,"errmsg":"appid missing"},微信 报错{“errcode“:41002,“errmsg“:“appid missing,微信小程序获取openid返回appid missing的问题,微信小程序提示Erro

🏆 前端领域优质创作者 5649

058、时域降噪(Temporal Denoise):运动补偿与递归滤波在视频降噪中的应用

本文深入探讨了时域降噪(Temporal Denoise)技术在视频处理中的应用。作者通过车载环视项目案例,揭示了空域降噪的局限性,提出利用帧间信息进行降噪的核心思路。文章详细解析了递归滤波和运动补偿两大关键技术,指出递归滤波简单但易产生拖影,而运动补偿通过计算运动矢量解决此问题。作者还分享了多帧降噪方案的优势与算力挑战,并总结了噪声模型匹配、运动矢量一致性等实战调优经验。最后强调时域降噪需要与空域降噪平衡,指出调试工具的重要性,提出"在保证运动区域无鬼影的前提下追求信噪比"的实践原则,体现了算法复杂度与效

zzfmlxs的博客 92

C#中调用Windows系统服务exe程序的工具类与重启服务的流程

场景 使用C#编写的Windows服务程序,在Winform中进行调用。 常用工具类方法检测服务c#教程 是否存在或者安装,获取服务状态,启动服务,停止服务的方法。 以在Winform中重启服务为例。 实现 新建工具类WinServiceHelper 检测服务是否安装sql语句或者存在的方法 /// <summary> /// 服务是否安装/存在 /// </summary> /// <param name="serviceName">服务名

chinaherolts2008的博客 414

matlab电子科技大学数学实验期末模拟35道(1)

【代码】matlab电子科技大学数学实验期末模拟35道。

c_wrj_的博客 2043

c#怎么启动和停止windows服务

protected void btnRestart_Click(object sender, EventArgs e) { ServiceController sc = new ServiceController( "wuauserv "); sc.ServiceName = "localhost "; switch (sc.Status) { case ServiceControllerSt

1812

动手在 SAP BTP Cloud Foundry 开发和部署 SAP UI5 应用的前置条件 - 订阅 SAP Build Work Zone Standard Version

摘要:本文介绍了SAP BTP Cloud Foundry环境中HTML5应用的概念,区分了web应用、HTML5应用和SAP UI5应用的关系。重点说明了在Cloud Foundry环境部署HTML5应用的方法是通过订阅SAP Build Work Zone standard edition服务,并详细描述了订阅过程中可能遇到的"OIDC trust missing"错误。该错误是由于业务用户认证需要配置SAP Cloud Identity Services的OpenID Connec

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 310

CATIA文件的网页预览方案

CATIA是工业设计中广泛使用的专业软件,产出`.CATPart`或 `.CATProduct`等文件类型,当资产数量较大时,我们希望快捷预览这些文件,就有了`CATPart`文件网页预览的需求 但我们知道,网页上无法直接渲染`CATPart`这种复杂的文件, CATIA生成的文件(如 `CATPart` 和 `CATProduct`)不仅包含三维几何信息(例如点、线和曲面),还涵盖了丰富的元数据与专业设计特征。 那有没有办法,能实现CATIA文件在网页上的便捷预览?

weixin_44211633的博客 1446

C#检查Windows是否安装了某个服务的方法

本文实例讲述了C#检查Windows是否安装了某个服务的方法。分享给大家供大家参考。具体如下: C#代码如下: ? 1 2 3 4 5 6 7 8 9 10 11 public static void ISWindowsServiceInstalled(string serviceName) {   // get

hoiven的专栏 940

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

使用C#的winform控制数据库实例服务的运行状态

C#操作数据库实例服务。

一杯浊酒笑风尘 566

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

用C#对Windows服务的关闭和启动

  1.   服务的关闭string in_Svclist = "UploadService";Console.WriteLine("{0} : Trying to Stop ....." , in_Svclist);ServiceController sc = new ServiceController(in_Svclist); if (sc.Status == Serv

嘉嘉的专栏 1414

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

上一篇: linux中使用arthas进行jvm内存分析
下一篇: TortoiseGit将分支代码合并到master主分支
蓝色格子
博客等级 码龄9年 129粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值