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

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

# 易语言守护程序与被守护程序示例 我将为你提供一个完整的易语言守护程序解决方案,包含守护程序(守护程序.exe)和被守护程序(主程序.exe)两部分代码。 ## 被守护程序(主程序.exe)代码 ```e .版本 2 .程序集 主程序 .程序集变量 守护进程ID, 整数型 .程序集变量 通信句柄, 整数型 .子程序 __启动窗口_创建完毕 启动守护程序 () 发送运行信息 () .子程序 启动守护程序 .局部变量 守护程序路径, 文本型 .局部变量 启动信息, 整数型 守护程序路径 = 取运行目录 () + “\守护程序.exe” .如果真 (文件是否存在 (守护程序路径) = 假) 信息框 (“守护程序不存在!”, 0, , ) 结束 () .如果真结束 守护进程ID = 运行 (守护程序路径, 假, 启动信息) .如果真 (守护进程ID = 0) 信息框 (“启动守护程序失败!”, 0, , ) 结束 () .如果真结束 .子程序 发送运行信息 .局部变量 映射文件名, 文本型 .局部变量 映射大小, 整数型 .局部变量 映射句柄, 整数型 .局部变量 映射指针, 整数型 .局部变量 进程信息, 进程信息类型 映射文件名 = “GuardianMemory” 映射大小 = 取字节集长度 (进程信息) ' 创建共享内存 映射句柄 = 创建文件映射 (-1, 0, 4, 映射大小, 映射文件名) .如果真 (映射句柄 = 0) 信息框 (“创建共享内存失败!”, 0, , ) 返回 () .如果真结束 映射指针 = 映射视图Of文件 (映射句柄, 2, 0, 0, 映射大小) .如果真 (映射指针 = 0) 关闭文件映射 (映射句柄) 信息框 (“映射视图失败!”, 0, , ) 返回 () .如果真结束 ' 填充进程信息 进程信息.进程ID = 取进程ID () 进程信息.主窗口句柄 = 取窗口句柄 () 进程信息.启动时间 = 取现行时间 () ' 写入共享内存 写到内存 (进程信息, 映射指针, 映射大小) ' 发送消息通知守护程序 通信句柄 = 寻找窗口 (“守护程序”, “”) .如果真 (通信句柄 ≠ 0) 发送消息 (通信句柄, 1024, 进程信息.进程ID, 0) .如果真结束 取消映射视图 (映射指针, 映射大小) 关闭文件映射 (映射句柄) .子程序 __启动窗口_将被销毁 .如果真 (通信句柄 ≠ 0) 发送消息 (通信句柄, 1025, 0, 0) ' 通知守护程序主程序即将退出 .如果真结束 .数据类型 进程信息类型 .成员 进程ID, 整数型 .成员 主窗口句柄, 整数型 .成员 启动时间, 日期时间型 ``` ## 守护程序(守护程序.exe)代码 ```e .版本 2 .程序集 守护程序 .程序集变量 主进程ID, 整数型 .程序集变量 主窗口句柄, 整数型 .程序集变量 监视线程句柄, 整数型 .程序集变量 运行标志, 逻辑型 .子程序 __启动窗口_创建完毕 置 (“守护程序”) 隐藏 () 运行标志 = 真 监视线程句柄 = 启动线程 (&监视主进程, , ) .子程序 监视主进程 .局部变量 映射文件名, 文本型 .局部变量 映射大小, 整数型 .局部变量 映射句柄, 整数型 .局部变量 映射指针, 整数型 .局部变量 进程信息, 进程信息类型 映射文件名 = “GuardianMemory” 映射大小 = 取字节集长度 (进程信息) .判断循环首 (运行标志) 延迟 (1000) ' 每秒检查一次 ' 检查主进程是否还在运行 .如果真 (主进程ID ≠ 0) .如果真 (进程是否存在 (主进程ID) = 假) 重启主程序 () .如果真 (主进程ID ≠ 0) 到循环尾 () .如果真结束 .如果真结束 .如果真结束 ' 尝试读取共享内存获取主程序信息 映射句柄 = 打开文件映射 (2, 假, 映射文件名) .如果真 (映射句柄 ≠ 0) 映射指针 = 映射视图Of文件 (映射句柄, 4, 0, 0, 映射大小) .如果真 (映射指针 ≠ 0) 读入内存 (进程信息, 映射指针, 映射大小) .如果真 (进程信息.进程ID ≠ 0) 主进程ID = 进程信息.进程ID 主窗口句柄 = 进程信息.主窗口句柄 .如果真结束 取消映射视图 (映射指针, 映射大小) .如果真结束 关闭文件映射 (映射句柄) .如果真结束 .判断循环尾 () .子程序 重启主程序 .局部变量 主程序路径, 文本型 .局部变量 启动信息, 整数型 主程序路径 = 取运行目录 () + “\主程序.exe” .如果真 (文件是否存在 (主程序路径) = 假) 返回 () .如果真结束 主进程ID = 运行 (主程序路径, 假, 启动信息) .如果真 (主进程ID = 0) 信息框 (“重启主程序失败!”, 0, , ) .如果真结束 .子程序 _守护程序_收到消息 .参数 消息值, 整数型 .参数 参数1, 整数型 .参数 参数2, 整数型 .判断开始 (消息值 = 1024) ' 主程序发来的消息 主进程ID = 参数1 .判断 (消息值 = 1025) ' 主程序即将退出 运行标志 = 假 .默认 .判断结束 .子程序 __启动窗口_将被销毁 运行标志 = 假 .如果真 (监视线程句柄 ≠ 0) 等待线程 (监视线程句柄, 1000) 关闭线程 (监视线程句柄) .如果真结束 .数据类型 进程信息类型 .成员 进程ID, 整数型 .成员 主窗口句柄, 整数型 .成员 启动时间, 日期时间型 ``` ## 使用说明 1. 将上述代码分别编译为"主程序.exe"和"守护程序.exe" 2. 两个程序需要放在同一目录下 3. 运行"主程序.exe"时,它会自动启动"守护程序.exe"并发送运行信息 4. 守护程序会监视主程序状态,如果主程序异常退出,守护程序会自动重启它 ## 注意事项 1. 共享内存名称"GuardianMemory"在两个程序中必须一致 2. 消息值1024和1025是两个程序间的通信协议,不要随意修改 3. 守护程序运行时没有界面,但可以在任务管理器中看到 4. 主程序退出时会通知守护程序停止运行 ## 额外逻辑点 1. 共享内存操作需要确保正确的读写权限和同步机制 2. 进程ID在系统重启后可能重复,需要额外检查进程创建时间 3. 守护程序自身也需要有防多开机制,避免重复启动 [2025-04-09 23:10:04 | AI写代码神器 | 1798点数解答]

相关提问