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

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

# 易语言守护程序与被守护程序示例 我将为你提供一个完整的易语言守护程序方案,包含被守护程序(`MainApp.exe`)和守护程序(`Guardian.exe`)。 ## 被守护程序代码 (`MainApp.e`) ```e .版本 2 .程序集 主程序 .程序集变量 守护进程ID, 整数型 .程序集变量 通信管道, 整数型 .子程序 _启动子程序, 整数型 .局部变量 命令行, 文本型 .局部变量 参数数组, 文本型, , "0" .局部变量 参数个数, 整数型 命令行 = 取命令行 () 参数数组 = 分割文本 (命令行, " ", ) 参数个数 = 取数组成员数 (参数数组) .如果真 (参数个数 > 0 且 参数数组 [1] = "restart") 信息框 ("程序已由守护进程重新启动", 0, "提示", ) .如果真结束 启动守护进程 () 发送运行信息 () 返回 (0) .子程序 启动守护进程 .局部变量 守护进程路径, 文本型 .局部变量 启动信息, 启动信息 守护进程路径 = 取运行目录 () + "\Guardian.exe" .如果真 (文件是否存在 (守护进程路径) = 假) 信息框 ("守护程序不存在: " + 守护进程路径, 0, "错误", ) 结束 () .如果真结束 启动信息.命令行 = 守护进程路径 启动信息.显示方式 = #隐藏窗口 守护进程ID = 运行 (启动信息, #隐藏窗口, ) .如果真 (守护进程ID = 0) 信息框 ("启动守护程序失败", 0, "错误", ) .如果真结束 .子程序 发送运行信息 .局部变量 进程ID, 文本型 .局部变量 程序路径, 文本型 .局部变量 发送数据, 文本型 通信管道 = 打开文件 ("\\.\pipe\GuardianPipe", #读写, ) .如果真 (通信管道 = 0) 信息框 ("无法连接到守护进程管道", 0, "错误", ) 返回 () .如果真结束 进程ID = 到文本 (取进程ID ()) 程序路径 = 取执行文件名 () 发送数据 = "PID=" + 进程ID + "|Path=" + 程序路径 写出文本 (通信管道, 发送数据) 关闭文件 (通信管道) .子程序 __启动窗口_创建完毕 置托盘图标 (#图标, "主程序") .子程序 __启动窗口_将被销毁 .局部变量 通信管道, 整数型 通信管道 = 打开文件 ("\\.\pipe\GuardianPipe", #读写, ) .如果真 (通信管道 ≠ 0) 写出文本 (通信管道, "EXIT") 关闭文件 (通信管道) .如果真结束 ``` ## 守护程序代码 (`Guardian.e`) ```e .版本 2 .程序集 守护程序 .程序集变量 被守护进程ID, 整数型 .程序集变量 被守护程序路径, 文本型 .程序集变量 管道服务器, 整数型 .程序集变量 运行标志, 逻辑型 .子程序 _启动子程序, 整数型 运行标志 = 真 创建管道服务器 () 返回 (0) .子程序 创建管道服务器 .局部变量 安全属性, SECURITY_ATTRIBUTES .局部变量 管道名称, 文本型 管道名称 = "\\.\pipe\GuardianPipe" 安全属性.nLength = 取结构长度 (安全属性) 安全属性.lpSecurityDescriptor = 0 安全属性.bInheritHandle = 真 管道服务器 = 创建命名管道 (管道名称, #PIPE_ACCESS_DUPLEX, #PIPE_TYPE_MESSAGE + #PIPE_READMODE_MESSAGE + #PIPE_WAIT, 1, 1024, 1024, 0, 安全属性) .如果真 (管道服务器 = #INVALID_HANDLE_VALUE) 信息框 ("创建命名管道失败", 0, "错误", ) 结束 () .如果真结束 .判断循环首 (运行标志) 处理客户端连接 () .判断循环尾 () 关闭管道服务器 () .子程序 处理客户端连接 .局部变量 客户端管道, 整数型 .局部变量 连接结果, 逻辑型 .局部变量 接收数据, 文本型 .局部变量 数据长度, 整数型 连接结果 = 连接命名管道 (管道服务器, ) .如果真 (连接结果 = 假) 返回 () .如果真结束 客户端管道 = 管道服务器 接收数据 = 取空白文本 (1024) 数据长度 = 读入文本 (客户端管道, 接收数据, 1024) .如果 (数据长度 > 0) 处理接收到的数据 (接收数据) .否则 断开命名管道 (客户端管道) .如果结束 .子程序 处理接收到的数据, 整数型 .参数 数据, 文本型 .局部变量 参数数组, 文本型, , "0" .局部变量 i, 整数型 .局部变量 键值对, 文本型, , "0" .局部变量 键, 文本型 .局部变量 值, 文本型 .如果真 (数据 = "EXIT") 运行标志 = 假 返回 (0) .如果真结束 参数数组 = 分割文本 (数据, "|", ) .计次循环首 (取数组成员数 (参数数组), i) 键值对 = 分割文本 (参数数组 [i], "=", ) .如果真 (取数组成员数 (键值对) = 2) 键 = 键值对 [1] 值 = 键值对 [2] .判断开始 (键 = "PID") 被守护进程ID = 到整数 (值) .判断 (键 = "Path") 被守护程序路径 = 值 .默认 .判断结束 .如果真结束 .计次循环尾 () 启动监控线程 () 返回 (0) .子程序 启动监控线程 .局部变量 线程ID, 整数型 线程ID = 创建线程 (0, 0, 到整数 (&监控进程), 0, 0, 0) .子程序 监控进程 .局部变量 进程状态, 整数型 .局部变量 启动信息, 启动信息 .判断循环首 (运行标志) 进程状态 = 取进程状态 (被守护进程ID) .如果真 (进程状态 = 0) ' 进程已结束 .如果真 (被守护程序路径 ≠ "") 启动信息.命令行 = 被守护程序路径 + " restart" 启动信息.显示方式 = #普通激活 运行 (启动信息, #普通激活, ) .如果真结束 被守护进程ID = 0 .如果真结束 延时 (1000) ' 每秒检查一次 .判断循环尾 () ``` ## 使用说明 1. 将两个程序分别编译为 `MainApp.exe` 和 `Guardian.exe` 2. 将两个程序放在同一目录下 3. 运行 `MainApp.exe`,它会自动启动 `Guardian.exe` 4. `MainApp.exe` 会将自己的进程ID和路径发送给 `Guardian.exe` 5. `Guardian.exe` 会监控 `MainApp.exe` 的运行状态 6. 如果 `MainApp.exe` 意外关闭,`Guardian.exe` 会自动重新启动它 ## 注意事项 1. 管道通信是同步操作,在实际应用中可能需要考虑超时处理 2. 守护程序没有界面,运行时不会显示窗口 3. 被守护程序关闭时会通知守护程序退出 4. 守护程序每秒检查一次被守护程序的状态 [2025-04-10 00:04:23 | AI写代码神器 | 1737点数解答]

相关提问