【C#】使用C#窗体应用开启/停止Apache、MySQL服务

news2024/11/17 15:53:28

目录

一、前言

二、效果图

三、配置文件

四、代码

五、一键启动/停止所有服务


一、前言

使用C#窗体应用开启Apache、MySQL服务,不仅仅是Apache、MySQL,其他服务也可以使用同样的方法操作,包括开启自己写的脚本服务。

二、效果图

两种状态:

① 开启Apache:点击启动按钮,开启apache,同时服务状态切换为运行中

② 停止apache:点击停止按钮,停止apache,同时服务状态切换为已停止

三、配置文件

用于存储需要操作的服务的路径和服务命,要根据实际情况修改,存放在”\bin\Debug\“目录下,命名为app.ini

[section]
apache=httpd
mysql=mysqld
python=StartService.vbs
python2=Python
apache_path=E:\phpstudy_pro\Extensions\Apache2.4.39\bin\httpd.exe
mysql_path=E:\phpstudy_pro\Extensions\MySQL5.7.26\bin\mysqld.exe
python_path=E:\Pyhton\flow\

四、代码

这里只展示开启和关闭Apache服务的代码,其他服务操作的代码一样就不再展示了,只需要把服务名和服务所在路径替换就可以了。

业务逻辑:

需要先读取配置文件app.ini文件里的内容,

① 开启服务:获取到apache的路径,构建启动信息,开始启动apache服务。

② 关闭服务:先获取apache的服务名(注意是服务名,不是路径),再查找名为apache的进程,找到后关闭该服务(为了确保确实关闭了,在2秒后使用Kill()强制关闭)。

读取配置文件的参数及用法可以看这篇文章

【C#】读取ini配置文件的内容_c#读取ini配置文件-CSDN博客

//配置文件路径
private string iniFilePath = Directory.GetCurrentDirectory() + "\\app.ini";

#region API函数声明
[DllImport("kernel32")]//返回取得字符串缓冲区的长度
private static extern long GetPrivateProfileString(string section, string key,
	string def, StringBuilder retVal, int size, string filePath);

#endregion

#region 读Ini文件

public static string ReadIniData(string Section, string Key, string NoText, string iniFilePath)
{
	if (File.Exists(iniFilePath))
	{
		StringBuilder temp = new StringBuilder(1024);
		GetPrivateProfileString(Section, Key, NoText, temp, 1024, iniFilePath);
		return temp.ToString();
	}
	else
	{
		return String.Empty;
	}
}



// 开启apache服务
private void apache_start_Click(object sender, EventArgs e)
{
	string apache_path = ReadIniData("section", "apache_path", "NoText", iniFilePath);
	string StartScript = @apache_path;

	// 构建启动信息
	ProcessStartInfo startInfo = new ProcessStartInfo
	{
		FileName = StartScript,
		CreateNoWindow = true, // 不创建窗口
		UseShellExecute = false, // 不使用系统外壳程序启动
		WindowStyle = ProcessWindowStyle.Hidden // 隐藏窗口
	};

	// 启动Apache
	using (Process apacheProcess = Process.Start(startInfo))
	{

		// 你可以在这里监控进程,或等待它结束
		apache_status.Text = "运行中";
		apache_status.ForeColor = System.Drawing.Color.Green;

	}
}
// 停止apache服务
private void apache_stop_Click(object sender, EventArgs e)
{
	string apache = ReadIniData("section", "apache", "NoText", iniFilePath);

	try
	{
		// 获取所有名为 "apache" 的进程  
		Process[] processes = Process.GetProcessesByName(apache);

		foreach (Process process in processes)
		{
			try
			{
				// 尝试优雅地关闭进程(如果可能的话)  
				// 注意:apache可能没有主窗口,因此CloseMainWindow可能不起作用  
				process.CloseMainWindow();

				// 等待一段时间看进程是否关闭  
				if (!process.WaitForExit(2000)) // 等待5秒  
				{
					// 如果进程没有关闭,则强制结束它  
					process.Kill();
				}
				apache_status.Text = "已停止";
				apache_status.ForeColor = System.Drawing.Color.Crimson;
			}
			catch (Exception ex)
			{
				// 处理任何异常,比如权限不足等 
				MessageBox.Show("Error closing process: " + ex.Message);
			}
		}

		MessageBox.Show("Apache services have been closed.");
	}
	catch (Exception ex)
	{
		// 处理获取进程列表时的任何异常  
		MessageBox.Show("Error getting process list: " + ex.Message);
	}
}

五、一键启动/停止所有服务

一键启动/关闭所有服务代码就不再展示,其原理是把需要开启的服务放到同一个点击事件里,比如说一键开启Apache、MySQL服务,只需要把开启Apache的代码和开启MySQL服务的代码放到同一个点击事件里就可以了。一键停止所有服务也是同样的道理,就不再贴代码了。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【大数据】五、yarn基础

Yarn Yarn 是用来做分布式系统中的资源协调技术 MapReduce 1.x 对于 MapReduce 1.x 的版本上: 由 Client 发起计算请求,Job Tracker 接收请求之后分发给各个TaskTrack进行执行 在这个阶段,资源的管理与请求的计算是集成在 mapreduce 上的…

TCP重传机制详解——01概述

文章目录 TCP重传机制详解——01概述什么是TCP重传?TCP为什么要重传?TCP如何做到重传?TCP重传方式有哪些超时重传(timeout or timer-based retransmission)快速重传(fast retransmission或者fast retransmit)改进的重传机制,早期重…

单机模拟分布式MINIO(阿里云)

拉取的最新MINIO: minio version RELEASE.2024-03-15T01-07-19Z Runtime: go1.21.8 linux/amd64 分布式 MinIO 至少需要4个节点,也就意味着至少4个硬盘,对于囊中羞涩仅用来开发测试的人来说,这笔花销还是比较高昂。有没有更好的…

手机可以看到电脑在干什么吗

手机与电脑之间的连接与互动已成为我们日常生活和工作中的常态。 那么,一个常被提及的问题是:手机可以看到电脑在干什么吗? 答案是肯定的。 随着技术的不断进步,我们现在已经可以通过多种方式实现手机对电脑操作的实时监控。 首…

hadoop namenode 查看日志里面报错8485无法连接

一、通过日志排查问题: 1、首先我通过jpsall命令查看我的进程,发现namenode都没有开启 2、找到问题后首先进入我的日志目录里查看namenode.log [rootnode01 ~]# /opt/yjx/hadoop-3.3.4/logs/ [rootnode01 ~]# ll [rootnode01 ~]# cat hadoop-root-nam…

短视频矩阵系统--技术实际开发打板3年真实开发分享

短视频矩阵系统--技术实际开发打板3年真实开发分享,短视频矩阵系统/矩阵获客系统是一种基于短视频平台的获客游戏。短视频矩阵系统可以通过多账号发布来替代传统的单账号游戏。可以一键发布所有账号,批量制作多个视频AI智能剪辑。过去很多人只能完成的工…

JupyterNotebook 如何切换使用的虚拟环境kernel

在Jupyter Notebook中,如果需要修改使用的虚拟环境Kernel: 首先,需要确保虚拟环境已经安装conda上【conda基本操作】 打开Jupyter Notebook。 在Jupyter Notebook的顶部菜单中,选择 “New” 在弹出的窗口中,列出了…

练习 12 Web [极客大挑战 2019]BabySQL

本题复习:1.常规的万能语句SQL查询,union联合查询,Extractvalue()报错注入 extractvalue(1,concat(‘0x7e’,select(database())))%23 我一开始挨着试,感觉都无效 直到报错注入,查到了库名‘geek’ 尝试查表名&…

长三角科技盛会“2024南京国际人工智能,机器人,自动驾驶展览会”

2024南京国际人工智能,机器人,自动驾驶展览会 2024 Nanjing International Ai, Robotics, Autonomous Driving Expo 时间:2024年11月22-24日 地点:南京国际博览中心 南京,这座历史悠久的文化名城,如今正站在新一轮科技产业变革的前沿,以人工…

伪装目标检测之注意力CBAM:《Convolutional Block Attention Module》

论文地址:link 代码:link 摘要 我们提出了卷积块注意力模块(CBAM),这是一种简单而有效的用于前馈卷积神经网络的注意力模块。给定一个中间特征图,我们的模块依次推断沿着两个独立维度的注意力图&#xff…

5.域控服务器都要备份哪些资料?如何备份DNS服务器?如何备份DHCP服务器?如何备份组策略?如何备份服务器状态的备份?

(2.1) NTD(域控数据库)备份 (2.2)DNS备份 (2.3)DHCP备份 (2.4)组策略备份 (2.5)CA证书备份 (2.6)系统状态备份 (2.1)…

乳腺癌分类模型

乳腺癌分类模型的定义中,必须有_init_(初始化)函数和forward(正向传播)函数 乳腺癌分类模型定义 # 自定义模型 class MyModel(torch.nn.Module):def __init__(self,in_features):super(MyModel,self).__init__() #调用…

qt+ffmpeg 实现音视频播放(三)之视频播放

一、视频播放流程 (PS:视频的播放流程跟音频的及其相似!!) 1、打开视频文件 通过 avformat_open_input() 打开媒体文件并分配和初始化 AVFormatContext 结构体。 函数原型如下: int avformat_open_inpu…

Flask python 开发篇:链接mysql

一、历史回顾 根据上一篇:配置文件编写,已经把各种配置根据开发环境做了区分,再config.py中,我们可以分别处理测试、生产的相关配置,这节主要说一下数据库的链接和使用 二、配置数据库连接 Flask定义和链接数据库文…

手机可以格式化存储卡吗?格式化以后出现什么情况

随着智能手机的普及,存储卡(如SD卡、MicroSD卡等)已成为手机存储扩展的重要工具。然而,在使用过程中,我们有时可能会遇到需要格式化存储卡的情况。那么,手机能否直接格式化存储卡呢?格式化后存储…

【Flutter学习笔记】10.3 组合实例:TurnBox

参考资料:《Flutter实战第二版》 10.3 组合实例:TurnBox 这里尝试实现一个更为复杂的例子,其能够旋转子组件。Flutter中的RotatedBox可以旋转子组件,但是它有两个缺点: 一是只能将其子节点以90度的倍数旋转二是当旋转…

在服务器(Ubuntu20.04)安装用户级别的cuda11.8(以及仿照前面教程安装cuda11.3后安装cudnn和pytorch1.9.0)

1、cuda11.8的下载 首先在cuda官网下载我们需要的cuda版本,这里我下载的是cuda11.8(我的最高支持cuda12.0) 这里我直接使用wget命令下载不了,于是我直接在浏览器输入后面的链接下载到本地,之后再上传至服务器的&am…

数据分析概述、Conda环境搭建及JupyterLab的搭建

1. 数据分析职责概述 当今世界对信息技术的依赖程度在不断加深,每天都会有大量的数据产生,我们经常会感到数据越来越多,但是要从中发现有价值的信息却越来越难。这里所说的信息,可以理解为对数据集处理之后的结果,是从…

SQLiteC/C++接口详细介绍sqlite3_stmt类(十)

返回:SQLite—系列文章目录 上一篇:SQLiteC/C接口详细介绍sqlite3_stmt类(九) 下一篇: SQLiteC/C接口详细介绍sqlite3_stmt类(十一) 38、sqlite3_column_value sqlite3_column_valu…

Python:熟悉简单的skfuzzy构建接近生活事件的模糊控制器”(附带详细注释说明)+ 测试结果

参考资料:https: // blog.csdn.net / shelgi / article / details / 126908418 ————通过下面这个例子,终于能理解一点模糊理论的应用了,感谢原作。 熟悉简单的skfuzzy构建接近生活事件的模糊控制器 假设下面这样的场景, 我们希望构建一套…