易语言实现守护程序与被守护程序:保障程序稳定运行实例
# 易语言守护程序与被守护程序示例 我将为你提供一个完整的易语言守护程序解决方案,包含守护程序(`守护程序.exe`)和被守护程序(`主程序.exe`)。 ## 被守护程序(主程序.exe) ```易语言 .版本 2 .程序集 主程序 .程序集变量 守护进程ID, 整数型 .程序集变量 通信句柄, 整数型 .子程序 __启动窗口_创建完毕 启动守护程序 () 延时 (1000) ' 等待守护程序启动 发送运行信息 () .子程序 启动守护程序 .局部变量 执行结果, 整数型 .局部变量 启动信息, 启动信息 启动信息.执行文件名 = 取运行目录 () + “\守护程序.exe” 启动信息.显示方式 = #隐藏窗口 执行结果 = 运行 (启动信息, 假, 守护进程ID) 如果 (执行结果 = 0) 则 信息框 (“无法启动守护程序”, 0, “错误”) 结束 () 结束 如果 .子程序 发送运行信息 .局部变量 进程ID, 整数型 .局部变量 窗口, 文本型 进程ID = 取进程ID () 窗口 = “主程序 - ” + 到文本 (进程ID) 置窗口 (窗口) ' 查找守护程序的通信窗口 通信句柄 = 寻找窗口 (“守护程序通信窗口”, “”) 如果 (通信句柄 = 0) 则 信息框 (“无法找到守护程序通信窗口”, 0, “错误”) 结束 () 结束 如果 ' 发送运行信息给守护程序 发送消息 (通信句柄, 1024, 进程ID, 0) .子程序 __启动窗口_将被销毁 ' 通知守护程序本程序即将退出 发送消息 (通信句柄, 1025, 0, 0) ``` ## 守护程序(守护程序.exe) ```易语言 .版本 2 .程序集 守护程序 .程序集变量 被守护进程ID, 整数型 .程序集变量 通信窗口句柄, 整数型 .程序集变量 定时器ID, 整数型 .子程序 __启动窗口_创建完毕 置窗口 (“守护程序通信窗口”) 隐藏 () ' 设置定时器,每5秒检查一次主程序状态 定时器ID = 置定时器 (5000, &检查主程序状态) .子程序 _守护程序_可否被关闭, 逻辑型 返回 (假) ' 防止用户关闭守护程序 .子程序 __启动窗口_收到消息 .参数 消息值, 整数型 .参数 参数1, 整数型 .参数 参数2, 整数型 判断 (消息值) 判断开始 (消息值 = 1024) ' 收到主程序的运行信息 被守护进程ID = 参数1 输出调试文本 (“收到主程序进程ID: ”, 被守护进程ID) 判断 (消息值 = 1025) ' 收到主程序的退出通知 输出调试文本 (“主程序正常退出”) 被守护进程ID = 0 判断结束 .子程序 检查主程序状态 .局部变量 进程是否存在, 逻辑型 如果 (被守护进程ID = 0) 则 返回 () 结束 如果 进程是否存在 = 进程是否存在 (被守护进程ID) 如果 (取反 (进程是否存在)) 则 输出调试文本 (“主程序异常退出,正在重新启动...”) 启动主程序 () 结束 如果 .子程序 启动主程序 .局部变量 执行结果, 整数型 .局部变量 启动信息, 启动信息 启动信息.执行文件名 = 取运行目录 () + “\主程序.exe” 启动信息.显示方式 = #普通激活 执行结果 = 运行 (启动信息, 假, 被守护进程ID) 如果 (执行结果 = 0) 则 输出调试文本 (“无法启动主程序”) 结束 如果 ``` ## 实现原理说明 1. 主程序启动时会自动运行守护程序,并发送自己的进程ID给守护程序 2. 守护程序隐藏运行,通过定时器定期检查主程序是否仍在运行 3. 如果主程序异常退出,守护程序会自动重新启动它 4. 主程序正常退出时会发送通知给守护程序 ## 使用说明 1. 将两个程序编译为`主程序.exe`和`守护程序.exe`,放在同一目录下 2. 运行`主程序.exe`,它会自动启动`守护程序.exe` 3. 测试时可以手动结束`主程序.exe`进程,观察守护程序是否会重新启动它 ## 注意事项 1. 守护程序使用了隐藏窗口,在任务管理器中可以看到它的进程 2. 守护程序不能通过常规方式关闭,需要从任务管理器结束进程 3. 两个程序通过Windows消息机制进行通信,确保它们在同一个用户会话中运行 ## 额外需要注意的逻辑点 1. 进程检查间隔不宜过短,避免系统资源浪费,示例中使用5秒间隔 2. 守护程序需要处理主程序多次启动的情况,避免创建多个实例 3. 实际部署时应考虑添加加密通信机制,防止恶意程序冒充主程序发送消息 ######[AI写代码神器 | 1218点数解答 | 2025-04-09 23:18:36]
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)369
- Python实现多个整数相乘的计算及开发建议(字节豆包 | 427点数解答 | 2026-02-25 19:25:10)43
- 编程求解 1 到 N 的阶乘和:Python 与 C++ 实现(字节豆包 | 650点数解答 | 2026-03-01 20:05:48)25
- C++实现自定义函数计算 f(a)+f(b)+f(c)(字节豆包 | 610点数解答 | 2026-04-11 20:22:28)19
- C++实现找出指定范围内完全数的方法及开发建议(字节豆包 | 692点数解答 | 2026-04-11 20:23:34)19
- C++ 计算 1 到 n 中数字 1 的出现次数的实现与解析(字节豆包 | 849点数解答 | 2026-04-11 20:24:18)22
- C++ 实现:从大整数中删数求最小密码的巧妙算法(DeepSeek | 473点数解答 | 2025-06-20 16:08:21)211
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)340
- Simmr模型:从参数输入到结果分析的完整流程揭秘(GPT | 190点数解答 | 2024-10-01 01:23:56)297
- 运行需求不明?这些关键信息助你精准启动!(DeepSeek | 84点数解答 | 2025-03-29 05:12:20)264
- 易语言游戏启动器代码优化:多线程、错误处理与资源管理全攻略(百度文心 | 736点数解答 | 2025-05-24 07:25:22)235
- 由于不清楚“运行”具体指向,下面是不同场景下可能吸引人的标题,你可按需选择: ### 科技编程类 1. 揭秘神秘代码的“运行”奇迹! ### 运动健康类 1. 开启活力“运行”,畅享健康人生! ### 项目运营类 1. 震撼!项目“运行”背后的惊人秘诀 (字节豆包 | 50点数解答 | 2025-09-10 19:30:18)127