易语言实现守护程序与被守护程序:精易模块助力,自动重启保障运行!
我将为你提供完整的守护程序(Guardian.exe)和被守护程序(Client.exe)的易语言实现方案,使用精易模块处理线程和管道操作。 ```e ' 守护程序(Guardian.e) .版本 2 .支持库 shell .支持库 EThread .程序集 守护程序 .程序集变量 被守护进程ID, 整数型 .程序集变量 被守护程序路径, 文本型 .程序集变量 管道服务器, 整数型 .程序集变量 运行标志, 逻辑型 .子程序 _启动子程序, 整数型 运行标志 = 真 创建管道服务器 () 返回 (0) .子程序 创建管道服务器 .局部变量 管道名称, 文本型 管道名称 = "\\.\pipe\GuardianPipe" 管道服务器 = 管道_创建命名管道 (管道名称, 1, 1024, 1024, 0) .如果真 (管道服务器 = 0) 信息框 ("创建命名管道失败", 0, "错误", ) 结束 () .如果真结束 .判断循环首 (运行标志) 处理客户端连接 () 延时 (100) .判断循环尾 () 管道_关闭 (管道服务器) .子程序 处理客户端连接 .局部变量 客户端管道, 整数型 .局部变量 接收数据, 文本型 .局部变量 数据长度, 整数型 客户端管道 = 管道_等待连接 (管道服务器) .如果真 (客户端管道 = 0) 返回 () .如果真结束 接收数据 = 取空白文本 (1024) 数据长度 = 管道_读入数据 (客户端管道, 接收数据, 1024) .如果 (数据长度 > 0) 处理接收到的数据 (接收数据) .否则 管道_断开连接 (客户端管道) .如果结束 .子程序 处理接收到的数据, 整数型 .参数 数据, 文本型 .局部变量 参数数组, 文本型, , "0" .局部变量 i, 整数型 .局部变量 键值对, 文本型, , "0" .局部变量 键, 文本型 .局部变量 值, 文本型 .如果真 (数据 = "EXIT") 运行标志 = 假 返回 (0) .如果真结束 参数数组 = 分割文本 (数据, "|", ) .计次循环首 (取数组成员数 (参数数组), i) 键值对 = 分割文本 (参数数组 [i], "=", ) .如果真 (取数组成员数 (键值对) = 2) 键 = 键值对 [1] 值 = 键值对 [2] .判断开始 (键 = "PID") 被守护进程ID = 到整数 (值) .判断 (键 = "Path") 被守护程序路径 = 值 .默认 .判断结束 .如果真结束 .计次循环尾 () 启动监控线程 () 返回 (0) .子程序 启动监控线程 线程_启动 (&监控进程, , ) .子程序 监控进程 .局部变量 进程状态, 逻辑型 .局部变量 启动信息, 启动信息 .判断循环首 (运行标志) 进程状态 = 进程_是否存在 (被守护进程ID) .如果真 (取反 (进程状态)) .如果真 (被守护程序路径 ≠ "") 启动信息.命令行 = 被守护程序路径 + " restart" 启动信息.显示方式 = 1 运行 (启动信息, 假, ) .如果真结束 被守护进程ID = 0 .如果真结束 延时 (1000) .判断循环尾 () ``` ```e ' 被守护程序(Client.e) .版本 2 .支持库 shell .支持库 EThread .程序集 被守护程序 .程序集变量 守护进程路径, 文本型 .程序集变量 自身PID, 整数型 .程序集变量 自身路径, 文本型 .子程序 _启动子程序, 整数型 守护进程路径 = 取运行目录 () + "\Guardian.exe" 自身PID = 取进程ID () 自身路径 = 取执行文件名 () 启动守护进程 () 发送进程信息 () 返回 (0) .子程序 启动守护进程 .局部变量 启动信息, 启动信息 .局部变量 进程状态, 逻辑型 进程状态 = 进程_是否存在1 ("Guardian.exe") .如果真 (取反 (进程状态)) 启动信息.命令行 = 守护进程路径 启动信息.显示方式 = 1 运行 (启动信息, 假, ) 延时 (2000) .如果真结束 .子程序 发送进程信息 .局部变量 客户端管道, 整数型 .局部变量 发送数据, 文本型 .局部变量 发送结果, 逻辑型 客户端管道 = 管道_连接 ("\\.\pipe\GuardianPipe") .如果真 (客户端管道 = 0) 信息框 ("连接守护进程失败", 0, "错误", ) 返回 () .如果真结束 发送数据 = "PID=" + 到文本 (自身PID) + "|Path=" + 自身路径 发送结果 = 管道_发送数据 (客户端管道, 发送数据) .如果真 (取反 (发送结果)) 信息框 ("发送进程信息失败", 0, "错误", ) .如果真结束 管道_关闭 (客户端管道) ``` 需要说明的几点: 1. 两个程序都需要使用精易模块(5.8以上版本) 2. Guardian.exe需要编译为控制台程序 3. Client.exe可以编译为窗口程序或控制台程序 4. 守护程序会每秒检查一次被守护进程状态 5. 被守护程序退出后会自动重新启动 三条额外需要注意的逻辑点: 1. 管道通信需要确保双方使用相同的命名管道名称 2. 进程ID可能在被守护程序崩溃后失效,需要重新获取 3. 守护程序自身崩溃会导致监控失效,可考虑增加守护程序的守护机制 ######[AI写代码神器 | 1313点数解答 | 2025-04-10 00:14:48]
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)343
- Python实现多个整数相乘的计算及开发建议(字节豆包 | 427点数解答 | 2026-02-25 19:25:10)25
- 编程求解 1 到 N 的阶乘和:Python 与 C++ 实现(字节豆包 | 650点数解答 | 2026-03-01 20:05:48)14
- PHP实训:从0到1搭建电商平台,收获技能与成长!(讯飞星火 | 674点数解答 | 2024-06-17 08:58:32)346
- C++ 实现:从大整数中删数求最小密码的巧妙算法(DeepSeek | 473点数解答 | 2025-06-20 16:08:21)194
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)310
- 二手车交易价格预测赛题:思路剖析与程序实现全步骤揭秘(讯飞星火 | 1207点数解答 | 2024-11-17 18:48:26)357
- 揭秘!40 万条数据二手车交易价格预测赛题思路与程序实现全步骤(字节豆包 | 557点数解答 | 2024-11-17 18:50:01)252
- 二手车交易价格预测赛题:从数据处理到模型调优全流程揭秘(阿里通义 | 1736点数解答 | 2024-11-17 18:50:36)282
- Simmr模型:从参数输入到结果分析的完整流程揭秘(GPT | 190点数解答 | 2024-10-01 01:23:56)285
- 运行需求不明?这些关键信息助你精准启动!(DeepSeek | 84点数解答 | 2025-03-29 05:12:20)250
- 易语言游戏启动器代码优化:多线程、错误处理与资源管理全攻略(百度文心 | 736点数解答 | 2025-05-24 07:25:22)223