开源检测本机已安装软件如果变化则通知管理员
功能说明: 该程序是一个基于易语言开发的自动化监控工具,主要功能是实时监测 Windows 操作系统中已安装软件的变化情况。当程序检测到计算机上新安装了软件(且非系统默认或预装软件)时,会自动收集相关信息并通过电子邮件发送给管理员,同时上传最新的软件列表文件作为附件。程序旨在用于企业终端管理、安全审计或用户行为监控场景。
以下是该程序的核心功能模块及技术逻辑总结:
一、程序初始化与自我保护
1. 防止重复启动
程序首先执行 `_禁止重复启动` 子程序。该模块通过在临时目录下创建一个以当前程序名为基础扩展名为 `.tmp` 的独占文件来实现互斥锁机制。如果文件句柄打开失败(说明已有同名进程在运行),程序将立即终止运行。这确保了同一时间只会有一个监控实例在工作,避免资源冲突或重复报警。
2. 注册开机自启
程序调用 `_注册自启动` 子程序,检查 Windows 注册表键值 `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run` 下是否存在指定项。如果不存在,则写入当前程序的运行路径。这使得该监控程序能够在用户登录 Windows 时自动运行,无需人工干预,确保持续监控的可用性。
二、软件环境扫描与数据生成
1. 遍历安装列表
`_生成系统程序列表` 子程序是数据采集的核心。它访问注册表 `HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall` 键值,枚举所有已安装的软件子项。
2. 关键信息提取
程序从每个软件的注册项中提取以下信息:
- 软件名称 (DisplayName)
- 软件版本 (DisplayVersion)
- 安装日期 (InstallDate)
- 卸载字符串 (UninstallString)
对于安装日期,程序尝试将其从数字时间戳转换为可读的文本时间格式。
3. 过滤规则
为了避免误报,程序内置了过滤逻辑。在写入列表前,会检查软件名称是否包含 "NVIDIA"、"Windows"、"Microsoft"、"安全更新" 等关键词。这些通常被视为系统组件或驱动,不属于需要特别关注的第三方应用。只有经过筛选后的有效软件名称才会被保留。
4. 生成暂存文件
扫描完成后,程序会将整理好的数据写入一个以主机名命名的临时 CSV 文件(格式为 `{主机名}_ListN.csv`),包含软件名称、版本、安装日期及卸载信息四列。
三、变更检测与逻辑判断
1. 列表比对
`_比较列表` 子程序负责决策流程。它将新生成的列表文件尺寸(Byte)与上一轮保存的旧列表文件(`{主机名}_List.csv`)的尺寸进行比较。虽然仅比较文件大小而非内容校验和,但在脚本层面这是一种快速判断软件列表是否有变动的策略。
2. 状态处理
- 若新旧文件尺寸不同:判定为有软件安装或卸载变动。程序删除旧文件,将新文件重命名为标准文件名覆盖旧记录,然后触发报警流程。
- 若新旧文件尺寸相同:判定无变动。程序直接删除临时新生成的文件,并正常退出,不发送邮件。
四、预警通知机制
1. 邮件配置
程序依赖全局变量配置的 SMTP 信息,包括发件服务器地址、端口(固定为 25)、账号、密码以及收件人地址(支持抄送和密送)。这些变量在 `_系统变量` 中被初始化为空,实际使用时需预先填入有效的邮箱配置信息。
2. 信息收集
`_发送通知邮件` 子程序在触发后会收集额外的计算机信息,包括注册表中的计算机描述(srvcomment)、主机名、网络工作组名称以及本地 IP 地址。这些信息将作为邮件正文的一部分,帮助管理员定位问题发生的机器位置。
3. 邮件发送
程序连接指定的 SMTP 服务器,构建邮件主题(例如:"XXX 的 XXX 电脑上安装新的软件了,请注意!”),并将新生成的软件列表 CSV 文件作为附件上传,随后发送给用户定义的收件地址。发送完成后断开发信服务器连接。
五、技术特点与注意事项
1. 依赖库支持
程序使用了 shell(系统操作)、internet(网络通信)以及 eAPI(扩展 API)支持库,表明其深度依赖于 Windows 底层接口和网络协议。
2. 权限要求
由于涉及注册表读写(特别是 HKLM)和系统目录文件操作,该程序通常需要以管理员权限运行才能正常工作。
3. 安全性与隐私
程序具备自我持久化能力(注册自启),属于典型的驻留型监控软件。在网络传输方面使用明文 SMTP(端口 25),建议在实际生产环境中注意账号密码的安全存储及网络通道的加密,防止敏感的软件资产清单泄露。
4. 局限性
目前的变更检测主要基于文件大小比对,若软件数量未变但单个软件大小或元数据微调导致文件尺寸巧合一致,可能会出现漏报。更严谨的实现应计算文件哈希值进行比对。此外,部分易语言命令(如网络相关)在不同网络环境下可能受防火墙策略影响导致连接超时。
综上所述,这是一个结构清晰、逻辑闭环的系统审计辅助工具,能够有效满足对办公电脑软件安装情况进行远程追踪和管理的基本需求。
======窗口程序集1
| |
| |------ __启动窗口_创建完毕
| |
| |------ _系统变量
| |
| |------ _禁止重复启动
| |
| |------ _注册自启动
| |
| |------ _生成系统程序列表
| |
| |------ __启动窗口_将被销毁
| |
| |------ _比较列表
| |
| |------ _发送通知邮件
| |
| |
======程序集1
| |
| |------ 网络_取工作组名
| |
| |------ GetPointerToByteStringW
| |
| |------ Unicode转Ansi
| |
| |
======调用的Dll
| |
| |---[dll]------ 打开表项
| |
| |---[dll]------ 关闭键句柄
| |
| |---[dll]------ 取本机工作组信息_
| |
| |---[dll]------ 取字节长度_
| |
| |---[dll]------ 释放指定内存_
| |
| |---[dll]------ 拷贝内存_
| |
| |---[dll]------ 宽字符到双字节1_
| |
| |---[dll]------ 宽字符到双字节_
| |
| |---[dll]------ 枚举子键
注:本站源码主要来源于网络收集。如有侵犯您的利益,请联系我们,我们将及时删除!
部分源码可能含有危险代码,(如关机、格式化磁盘等),请看清代码在运行。
由此产生的一切后果本站均不负责。源码仅用于学习使用,如需运用到商业场景请咨询原作者。
使用本站源码开发的产品均与本站无任何关系,请大家遵守国家相关法律。