酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

用 易语言 语言,帮忙写一个 守护自身 的程序例子,就是打开程序 这个程序会打开一个 守护程序.exe 这个守护程序是用易语言的 windows控制台窗口 写的 然后被守护的程序会发送 一个 本身的 运行信息过去 然后守护程序就开始进行守护,切记 守护程序 和 被守护程序 都是需要你写出来给我

# 易语言守护程序与被守护程序示例 我将为你提供一个完整的易语言守护程序实现,包括被守护程序(`MainApp.exe`)和守护程序(`Guardian.exe`)。 ## 被守护程序(MainApp.e) ```e .版本 2 .程序集 MainApp .程序集变量 守护进程ID, 整数型 .程序集变量 通信管道, 整数型 .子程序 _启动子程序, 整数型 .局部变量 命令行, 文本型 .局部变量 参数数组, 文本型, , "0" .局部变量 参数个数, 整数型 命令行 = 取命令行 () 参数个数 = 分割文本 (命令行, " ", 参数数组) ' 检查是否由守护程序启动 .如果 (参数个数 > 0 且 参数数组 [1] = "--guardian") 信息框 ("本程序由守护程序启动", 0, , ) .否则 ' 启动守护程序 运行 ("Guardian.exe " + 取执行文件名 (), 假, ) .如果结束 ' 模拟主程序工作 主程序工作 () 返回 (0) .子程序 主程序工作 .局部变量 i, 整数型 .计次循环首 (100, i) 延时 (1000) 输出调试文本 ("主程序正在运行: " + 到文本 (i)) .计次循环尾 () .子程序 __启动窗口_创建完毕 ' 主窗口创建时向守护程序发送心跳 通信管道 = 打开文件 ("\\.\pipe\GuardianPipe", #读写, ) .如果真 (通信管道 ≠ 0) 写文本行 (通信管道, "HEARTBEAT|" + 到文本 (取进程ID ())) 关闭文件 (通信管道) .如果真结束 .子程序 __启动窗口_可否被关闭, 逻辑型 ' 关闭时通知守护程序 通信管道 = 打开文件 ("\\.\pipe\GuardianPipe", #读写, ) .如果真 (通信管道 ≠ 0) 写文本行 (通信管道, "SHUTDOWN|" + 到文本 (取进程ID ())) 关闭文件 (通信管道) .如果真结束 返回 (真) ``` ## 守护程序(Guardian.e) ```e .版本 2 .程序集 Guardian .程序集变量 被守护进程路径, 文本型 .程序集变量 被守护进程ID, 整数型 .程序集变量 管道服务器, 整数型 .程序集变量 是否运行, 逻辑型 .子程序 _启动子程序, 整数型 .局部变量 命令行, 文本型 .局部变量 参数数组, 文本型, , "0" .局部变量 参数个数, 整数型 命令行 = 取命令行 () 参数个数 = 分割文本 (命令行, " ", 参数数组) .如果 (参数个数 < 1) 信息框 ("用法: Guardian.exe <被守护程序路径>", 0, , ) 返回 (0) .否则 被守护进程路径 = 参数数组 [1] .如果结束 ' 隐藏控制台窗口 隐藏控制台 () ' 创建命名管道用于通信 管道服务器 = 创建管道 ("\\.\pipe\GuardianPipe", 1024) .如果真 (管道服务器 = 0) 信息框 ("创建管道失败", 0, , ) 返回 (0) .如果真结束 是否运行 = 真 启动线程 (&守护循环, , ) ' 启动被守护程序 启动被守护程序 () 返回 (0) .子程序 守护循环 .局部变量 客户端管道, 整数型 .局部变量 接收数据, 文本型 .局部变量 数据数组, 文本型, , "0" .判断循环首 (是否运行) 客户端管道 = 等待管道连接 (管道服务器, 500) .如果真 (客户端管道 ≠ 0) 接收数据 = 读文本行 (客户端管道) 关闭文件 (客户端管道) .如果真 (接收数据 ≠ "") 分割文本 (接收数据, "|", 数据数组) .如果 (数据数组 [1] = "HEARTBEAT") 被守护进程ID = 到整数 (数据数组 [2]) 输出调试文本 ("收到心跳: PID=" + 到文本 (被守护进程ID)) .否则 (数据数组 [1] = "SHUTDOWN") 是否运行 = 假 .如果结束 .如果真结束 .如果真结束 ' 检查被守护程序是否仍在运行 .如果真 (被守护进程ID ≠ 0 且 进程是否存在 (被守护进程ID) = 假) 输出调试文本 ("被守护程序已退出,重新启动...") 启动被守护程序 () .如果真结束 延时 (1000) .判断循环尾 () 关闭管道 (管道服务器) .子程序 启动被守护程序 .局部变量 进程信息, 进程信息型 进程信息 = 运行 (被守护进程路径 + " --guardian", 真, ) 被守护进程ID = 进程信息.进程标识符 输出调试文本 ("启动被守护程序: PID=" + 到文本 (被守护进程ID)) .子程序 隐藏控制台 .局部变量 hWnd, 整数型 hWnd = FindWindowA ("ConsoleWindowClass", 0) .如果真 (hWnd ≠ 0) ShowWindow (hWnd, 0) .如果真结束 ``` ## 使用说明 1. 先编译`Guardian.e`生成`Guardian.exe` 2. 再编译`MainApp.e`生成`MainApp.exe` 3. 运行`MainApp.exe`,它会自动启动`Guardian.exe`并传递自身路径 4. `Guardian.exe`会隐藏运行并监控`MainApp.exe`的状态 5. 如果`MainApp.exe`意外关闭,`Guardian.exe`会自动重新启动它 ## 三条额外需要注意的逻辑点 1. 管道通信需要确保双方都能正确打开和关闭管道,避免资源泄漏 2. 守护程序需要正确处理被守护程序的各种退出情况,包括正常退出和崩溃 3. 心跳机制的时间间隔需要合理设置,太短会增加系统负担,太长会影响守护效果 [2025-04-09 23:19:42 | AI写代码神器 | 1388点数解答]

相关提问