在 Windows 平台上,要监视软件安装过程中对系统的修改(如新增文件、注册表修改等),有一些工具可以帮助你实现这种监视与记录。以下是几款常见的适合用于监控软件安装过程的工具:

在 Windows 平台上,要监视软件安装过程中对系统的修改(如新增文件、注册表修改等),有一些工具可以帮助你实现这种监视与记录。以下是几款常见的适合用于监控软件安装过程的工具:

1. Process Monitor (ProcMon)

  • 功能Process Monitor 是由 Microsoft 的 Sysinternals 提供的一款非常强大的工具,它能够实时监视和记录文件系统、注册表、进程等操作。
  • 使用方式
    • Process Monitor 可以跟踪安装程序对文件的读取/写入、注册表的修改、进程的启动/停止等活动。
    • 它提供详细的日志输出,可以筛选特定的操作类型(如文件创建、删除、注册表修改等)来帮助分析软件安装过程中所做的具体改变。
  • 优点:强大且实时,几乎可以监控所有类型的系统活动。
  • 下载地址Process Monitor 下载

2. RegShot

  • 功能RegShot 是一个轻量级的工具,用于监视注册表的变化,适用于检测软件安装前后对注册表的修改。
  • 使用方式
    • 在安装软件之前,使用 RegShot 执行一次快照记录注册表的状态。
    • 安装软件后,再次执行快照,RegShot 会比较前后的差异,并生成修改的详细报告。
  • 优点:专注于注册表监控,操作简单,适合快速记录注册表变化。
  • 下载地址RegShot 下载

3. Sandboxie

  • 功能Sandboxie 是一个沙箱程序,可以将软件安装过程隔离在一个虚拟环境中,从而监视并记录该软件对文件系统和注册表的所有修改。
  • 使用方式
    • 将要安装的软件放入 Sandboxie 沙箱中运行,Sandboxie 会记录该软件对系统的所有修改。
    • 安装完成后,可以通过 Sandboxie 查看和导出文件、注册表、环境变量等的变动情况。
  • 优点:通过沙箱技术隔离应用,避免直接对系统造成影响,适合进行全面的监控与分析。
  • 下载地址Sandboxie 下载

4. Total Uninstall

  • 功能Total Uninstall 是一款安装监视和卸载管理工具,主要用于在软件安装时监视系统的所有变化,包括文件、注册表和系统设置的更改。
  • 使用方式
    • 在安装软件前,使用 Total Uninstall 创建系统快照。
    • 软件安装后,重新运行它,生成与安装前后的系统差异报告。
    • 可以清晰地查看软件对文件和注册表的所有修改,方便后期清理。
  • 优点:易于使用,生成详细的安装日志,能够帮助用户对软件进行完全卸载。
  • 下载地址Total Uninstall 下载

5. Inno Setup + Inno Script Studio

  • 功能Inno Setup 是一款非常流行的 Windows 安装程序制作工具,配合 Inno Script Studio 可以创建脚本监视安装过程中对文件和注册表的修改。
  • 使用方式
    • 利用 Inno Setup 制作自定义安装包,配合脚本在安装过程中监控文件和注册表的修改。
    • 可以使用 Inno Setup 自带的功能将监视和日志记录嵌入到安装过程当中。
  • 优点:适合开发人员对软件安装过程进行详细的定制化记录。
  • 下载地址Inno Setup 下载

6. InstallWatch Pro

  • 功能InstallWatch Pro 是一款安装监视工具,能够记录软件安装过程中对文件系统、注册表和系统配置的修改。
  • 使用方式
    • 在安装软件前创建一个系统快照,记录当前的文件和注册表状态。
    • 安装软件后,再次创建快照,InstallWatch Pro 会提供详细的差异报告,帮助你了解软件对系统的修改。
  • 优点:详细的报告,适用于分析软件的安装过程。
  • 下载地址:这个工具较为古老,可能需要通过第三方网站下载。

7. WhatChanged

  • 功能WhatChanged 是一个用于监控和记录软件安装过程中对系统的修改的工具。它能够生成清晰的报告,记录安装过程中所有变更的细节。
  • 使用方式
    • 在安装软件之前,使用 WhatChanged 创建初始快照。
    • 安装软件后,重新运行 WhatChanged,它会显示文件和注册表的所有变化。
  • 优点:轻量、快速,可以帮助用户清楚地看到安装过程中的变化。
  • 下载地址WhatChanged 下载

8. Revo Uninstaller

  • 功能Revo Uninstaller 是一款功能强大的卸载工具,除了卸载软件外,还能够监控软件的安装过程,并生成安装时的详细报告。
  • 使用方式
    • 在安装软件时,通过 Revo Uninstaller 监控并记录文件和注册表的变化。
    • 安装完成后,Revo Uninstaller 会显示和导出软件安装的所有修改。
  • 优点:除监控安装过程外,还支持彻底卸载软件和清理残留。
  • 下载地址Revo Uninstaller 下载

 

如果你需要详细记录软件安装时对系统做出的所有修改,以下工具非常适用:

  • Process Monitor(强大的实时监控工具,适用于全方位的监控)
  • RegShot(专注于注册表变化)
  • Sandboxie(通过沙箱隔离来监控)
  • Total Uninstall(记录安装的所有变化,适合之后清理)
  • InstallWatch Pro(安装监视工具,记录详细差异)

这些工具结合使用,可以帮助你全面了解软件安装时对系统的影响,特别适合需要深度分析或监控安装过程的用户。


还有一些其他的工具和方法可以用来监控软件安装过程中的系统变化。以下是几款值得注意的工具:

9. PestPatrol

  • 功能PestPatrol 是一款恶意软件防护工具,但它也有强大的系统监控功能。它可以在软件安装过程中监控并记录对文件系统和注册表的修改。
  • 使用方式
    • 在安装软件前,启用 PestPatrol 的监控功能,它会在软件安装时记录所有对文件和注册表的操作。
    • 安装结束后,可以查看详细的日志,分析系统变化。
  • 优点:除了监控安装外,还能防止恶意软件的影响,适合需要安全性和监控并重的用户。
  • 下载地址:该软件不常见,可能需要通过一些第三方软件下载站点获取。

10. Uninstall Tool

  • 功能Uninstall Tool 是一款全面的卸载管理工具,除了卸载功能外,还能够监控安装过程中的系统变化。
  • 使用方式
    • 在安装软件时,使用 Uninstall Tool 进行监控,它会记录软件安装时对文件和注册表的所有修改。
    • 安装完成后,生成差异报告,帮助分析安装软件对系统的影响。
  • 优点:它不仅能监控安装过程,还能有效管理和卸载应用,清理残留。
  • 下载地址Uninstall Tool 下载

11. DiskPulse

  • 功能DiskPulse 是一款用于监控硬盘和文件系统的工具。它可以记录软件安装过程中对文件的修改,特别适合用于追踪文件和文件夹的变化。
  • 使用方式
    • 安装软件前,设置 DiskPulse 来监控特定的文件夹或硬盘。
    • 安装软件后,查看 DiskPulse 生成的报告,了解软件安装过程中对文件的任何变化。
  • 优点:专注于文件和文件夹变化,适用于文件系统监控。
  • 下载地址DiskPulse 下载

12. Advanced Installer

  • 功能Advanced Installer 是一款用于创建和打包 Windows 安装程序的工具,它包含了安装包监控功能,可以生成安装过程中的详细日志,记录文件、注册表和系统设置的所有修改。
  • 使用方式
    • 通过 Advanced Installer 创建自定义安装程序,使用其监控功能来捕捉安装过程中所有的变动。
    • 生成的日志可以帮助分析和记录软件安装过程中对系统做出的改动。
  • 优点:可以生成详细的安装日志,适合开发者和系统管理员使用。
  • 下载地址Advanced Installer 下载

13. ReInstallator

  • 功能ReInstallator 是一款安装监控工具,专注于记录软件安装过程中的所有文件和注册表变化,尤其适合用于卸载和恢复系统状态。
  • 使用方式
    • 在安装软件时,启动 ReInstallator 来记录安装过程中的系统变化。
    • 安装完成后,查看报告,了解软件对系统的修改。
  • 优点:可以帮助用户在安装后恢复原始系统状态,适合进行彻底的系统清理。
  • 下载地址ReInstallator 下载

14. Honeyd

  • 功能Honeyd 是一个虚拟化工具,可以模拟多个虚拟主机,并监控软件在这些虚拟主机上的安装和运行情况。
  • 使用方式
    • 创建虚拟主机,安装软件,并在虚拟主机上运行。
    • Honeyd 会记录软件对这些虚拟环境的所有操作,并生成详细的报告。
  • 优点:提供虚拟化环境来隔离并监控软件的行为,适合进行高风险软件的测试和分析。
  • 下载地址Honeyd 下载

15. Wireshark

  • 功能Wireshark 是一款开源的网络协议分析工具,虽然它主要用于网络流量分析,但也可以用来监控和记录安装过程中产生的网络通信。
  • 使用方式
    • 在安装软件时,使用 Wireshark 监控系统的网络活动,尤其是在需要下载或激活的过程中。
    • Wireshark 可以捕获所有的 HTTP 请求、DNS 查询等,帮助你了解软件与外部网络的交互。
  • 优点:适合需要监控软件与网络通信的用户,尤其是涉及到联网激活或数据交换的软件。
  • 下载地址Wireshark 下载

16. Cuckoo Sandbox

  • 功能Cuckoo Sandbox 是一款开源的自动化恶意软件分析系统,适合用来分析软件安装过程中对系统的所有影响。
  • 使用方式
    • 在沙箱环境中安装软件,Cuckoo Sandbox 会自动监控文件、注册表、进程、网络等活动。
    • 安装过程结束后,生成详细的报告,帮助分析软件的行为。
  • 优点:强大的恶意软件分析功能,适合需要进行深入软件行为分析的用户。
  • 下载地址Cuckoo Sandbox 下载

17. FileMonitor

  • 功能FileMonitor 是一款实时监控文件系统变化的工具,能够记录软件安装过程中对文件和文件夹的修改。
  • 使用方式
    • 启动 FileMonitor 来监控特定目录或整个硬盘,在软件安装过程中记录文件变化。
    • 查看文件系统的所有变化,帮助分析安装软件时对文件的影响。
  • 优点:简单易用,专注于文件监控,适合快速查看文件系统的变化。
  • 下载地址FileMonitor 下载

 

  • 如果你关注 恶意软件分析 或需要更 深度的监控,可以使用 HoneydCuckoo Sandbox 或 Wireshark 等工具。
  • 如果你只需要 简单的文件和注册表监控,可以选择 FileMonitorDiskPulse 或 Revo Uninstaller
  • 如果你是 开发者或管理员,需要 自定义监控和日志Advanced Installer 或 PestPatrol 可能更加适合你。

这些工具提供不同层面的监控和分析功能,可以帮助你全面了解软件安装对系统的影响,选择合适的工具可以根据你的需求来进行。


SnowShot_2025-11-21_15-06-42

SnowShot_2025-11-21_15-07-02


对于《Inno Setup》初级使用教程,以下是一个简单的大纲,帮助你了解如何使用这个工具来创建安装程序:

1. 什么是Inno Setup?

  • 简介:Inno Setup是一款免费且功能强大的安装制作工具,广泛用于Windows应用程序的安装程序制作。
  • 主要特点:易用、功能强大、支持多种安装方式。

2. 安装Inno Setup

  • 官方网站下载链接
  • 安装步骤:如何下载并安装Inno Setup。

3. 创建第一个安装程序

  • 创建新项目:如何启动一个新项目并设置基本参数。
  • 设置安装目录:指定安装文件的默认位置。
  • 添加文件:如何将需要打包的文件加入到安装包中。
  • 选择目标平台:如何指定目标操作系统(如x86或x64)。

4. 脚本基础

  • 什么是Inno Setup脚本?
  • 基本脚本结构介绍([Setup]、[Files]、[Icons]等)。
  • 如何自定义安装选项(如安装路径、快捷方式等)。

5. 添加快捷方式

  • 在桌面、开始菜单添加快捷方式。
  • 设置快捷方式图标。

6. 自定义安装选项

  • 配置安装时出现的用户界面。
  • 提供用户选择安装的可选组件(例如,默认安装、定制安装)。
  • 设置安装条件,如操作系统版本要求。

7. 编译与打包

  • 如何编译Inno Setup脚本并生成安装程序。
  • 测试安装包:确保打包后能够正常安装并卸载。

8. 高级功能

  • 使用命令行参数自定义安装过程。
  • 添加卸载程序功能。
  • 设置安装后的默认行为(如启动程序、运行脚本等)。

9. 调试与问题排查

  • 如何使用日志功能调试安装程序。
  • 常见错误和解决方法。

10. 总结与进一步学习

  • 总结:Inno Setup的基本功能和用法。
  • 进一步的资源与学习资料(官方文档、社区支持等)。

这个大纲适合入门级用户,帮助他们快速上手Inno Setup。


对于《Inno Setup》中的级使用教程,以下是一个更为详细的大纲,帮助你深入了解如何利用Inno Setup的高级功能来创建更复杂的安装程序:

1. 回顾Inno Setup基础

  • 快速回顾: 安装包的创建、文件添加、脚本结构和编译流程。
  • 安装包类型: 区分标准安装包与自定义安装包。

2. 高级脚本编写

  • 自定义脚本结构:
    • 更复杂的[Setup]、[Files]、[Icons]部分。
    • 添加自定义变量和常量,提升脚本灵活性。
  • 使用函数:
    • 定义和调用自定义函数。
    • 实现复杂的安装逻辑(如条件检查、路径计算等)。
  • 控制流:
    • 使用if语句、for循环等条件控制,灵活定制安装过程。
    • 条件安装不同的文件或功能模块。

3. 创建自定义安装界面

  • 设计自定义对话框:
    • 使用[Code]部分编写脚本,定制安装界面。
    • 添加自定义文本框、按钮、复选框等控件。
  • 用户输入验证:
    • 捕获并验证用户输入(如安装路径、序列号等)。
    • 根据用户输入自定义安装行为。
  • 多语言支持:
    • 实现多语言界面支持,帮助不同语言环境下的用户。

4. 多版本和多平台支持

  • 创建多个版本的安装包:
    • 使用条件判断创建不同版本(如“标准版”和“专业版”)的安装包。
    • 定义不同的安装选项、组件和路径。
  • 支持32位和64位操作系统:
    • 根据操作系统自动选择适当的文件。
    • 使用IfDef语句判断平台。

5. 文件操作与权限管理

  • 高级文件操作:
    • 使用FileCopyFileDelete等命令进行更复杂的文件管理。
    • 检查文件是否存在,替换或备份文件。
  • 权限管理:
    • 设置安装程序需要的管理员权限。
    • 在需要时提示用户提升权限(使用UAC)。
  • 设置安装路径:
    • 使用系统环境变量(如{app}{pf})动态设置安装路径。
    • 提供自定义路径选择。

6. 注册表操作与环境变量

  • 注册表管理:
    • 创建和修改注册表项(如存储软件配置信息、许可信息)。
    • 管理注册表键值(如删除特定键、设置值)。
  • 环境变量:
    • 设置系统或用户级环境变量(如PATH、JAVA_HOME等)。
    • 使用环境变量进行条件判断和文件路径设置。

7. 自定义卸载程序

  • 卸载功能定制:
    • 在卸载时执行特定的操作(如清理日志文件、删除残留的配置文件等)。
    • 设置卸载时的确认界面。
  • 卸载后清理:
    • 清理安装过程中创建的临时文件和注册表项。
    • 删除用户选择的文件或目录。

8. 加密与保护

  • 加密文件:
    • 使用Inno Setup加密敏感文件(如注册密钥、配置文件)。
    • 加密安装包或文件,避免文件被篡改。
  • 反破解:
    • 添加反破解措施,防止安装程序被逆向工程。

9. 网络安装与更新

  • 创建网络安装程序:
    • 设置安装程序支持从网络下载和安装组件。
    • 配置安装程序通过HTTP/FTP下载文件。
  • 自动更新功能:
    • 在安装程序中嵌入自动更新机制,支持安装后版本检查、下载和升级。

10. 调试与优化

  • 调试安装程序:
    • 使用Inno Setup的日志功能进行调试。
    • 设置安装过程中的调试输出,查找错误或警告。
  • 性能优化:
    • 压缩文件和优化安装包体积。
    • 使用多线程和并行处理加速安装过程。

11. 打包和发布

  • 分发方式:
    • 使用自定义启动器创建独立安装包或分割安装包。
    • 创建支持自解压的安装包。
  • 自动化构建:
    • 使用命令行参数和批处理文件自动化构建和发布安装包。

12. 总结与进阶学习

  • 复习: 本教程覆盖的高级功能和技巧。
  • 进一步学习资源:
    • 推荐Inno Setup官方文档和社区支持。
    • 学习其他安装程序制作工具,以便于在不同场景下做出选择。

附录

  • 常见错误排查:
    • 常见的Inno Setup脚本错误与解决方法。
  • Inno Setup扩展:
    • 推荐的插件和脚本扩展,提升Inno Setup功能。

通过这个教程大纲,你将能熟练使用Inno Setup来创建更复杂、定制化的安装程序。


《Inno Setup》高级使用教程大纲

对于《Inno Setup》高级使用教程,以下是更加深入的内容,帮助你全面掌握如何使用Inno Setup的高级功能来定制复杂的安装程序:

1. Inno Setup基础回顾

  • 快速复习: 总结安装包创建、文件管理、脚本结构与编译流程。
  • 安装包类型区分: 标准安装包与定制安装包的区别与使用场景。

2. 脚本编写技巧与优化

  • 高级脚本结构:
    • 如何使用[Setup][Files][Icons]等部分构建灵活的安装包结构。
    • 添加自定义变量、常量,提升脚本的可重用性。
  • 使用自定义函数:
    • 定义复杂的安装逻辑函数,如路径判断、文件处理等。
    • 灵活使用if语句、for循环等控制流进行安装流程的定制。
  • 条件编译:
    • 根据平台、操作系统版本或其他条件动态调整安装包内容。

3. 自定义安装界面设计

  • 定制对话框:
    • 使用代码部分编写自定义对话框,增加交互性。
    • 自定义按钮、文本框、复选框等控件。
  • 用户输入验证:
    • 捕获并验证用户输入的数据(如安装路径、序列号)。
    • 根据用户输入信息动态调整安装行为。
  • 多语言支持:
    • 为安装程序添加不同语言的支持,使其适应全球用户。

4. 多版本与多平台支持

  • 多版本安装包:
    • 使用条件判断创建多个版本的安装包,如“标准版”和“专业版”。
    • 根据需求选择安装选项、组件和目标路径。
  • 平台支持(32位与64位):
    • 自动选择适当的文件,支持32位和64位操作系统。
    • 使用IfDef语句判断并选择文件。

5. 文件操作与权限管理

  • 文件操作:
    • 高级文件操作(如文件复制、删除、备份)与文件冲突解决。
    • 检查文件是否存在,条件性地更新文件。
  • 权限管理:
    • 设置安装程序的管理员权限,使用UAC请求提升权限。
  • 动态安装路径:
    • 使用系统环境变量(如{app}{pf})动态设置安装路径。

6. 注册表与环境变量管理

  • 注册表操作:
    • 创建、修改或删除注册表项,如存储软件配置信息、许可证信息等。
    • 管理注册表键值,确保安装程序配置的持久性。
  • 环境变量:
    • 设置系统级或用户级的环境变量(如PATHJAVA_HOME)。
    • 根据环境变量值进行条件判断,影响安装决策。

7. 定制卸载程序

  • 卸载时的特定操作:
    • 执行清理任务,如删除日志文件、删除残留配置。
    • 设置卸载确认界面,防止误卸载。
  • 卸载后的清理:
    • 清理临时文件、注册表项或用户自定义的文件和目录。

8. 加密与安全

  • 加密文件:
    • 使用Inno Setup的加密功能保护敏感文件(如注册码、配置文件)。
    • 加密整个安装包,防止篡改。
  • 反破解:
    • 添加防破解措施,确保安装程序不被逆向工程。

9. 网络安装与自动更新

  • 网络安装:
    • 设置安装程序支持从网络(如HTTP/FTP)下载文件并完成安装。
    • 创建支持网络安装的自定义安装包。
  • 自动更新:
    • 嵌入自动更新机制,在安装后检查、下载并安装最新版本。

10. 调试与性能优化

  • 调试安装包:
    • 使用日志功能调试安装过程,分析潜在的错误或警告。
    • 配置调试输出,帮助开发者排查问题。
  • 性能优化:
    • 压缩文件,优化安装包的大小和安装速度。
    • 使用并行处理加速文件的复制与安装。

11. 打包与发布

  • 打包方式:
    • 创建分割的安装包,支持大文件的分发。
    • 使用自定义启动器将多个安装文件打包成一个完整的安装包。
  • 自动化构建:
    • 使用命令行参数、批处理文件等自动化构建与发布安装包。

12. 总结与进阶学习

  • 回顾: 总结教程中涉及的高级技巧和功能。
  • 进一步资源:
    • 推荐官方文档、社区支持以及第三方插件,扩展Inno Setup的功能。
    • 学习其他安装包制作工具,提升在不同场景中的灵活应用。

附录

  • 常见错误排查:
    • 总结常见的Inno Setup脚本错误,并给出解决方案。
  • Inno Setup扩展:
    • 推荐一些有用的插件和脚本扩展,提升Inno Setup功能。

通过这个高级教程大纲,你将能更加灵活地使用Inno Setup创建复杂的安装程序,掌握多种定制化功能。


这是一个更为深入的《Inno Setup》专家级使用教程大纲,专注于提高你对Inno Setup的掌握,帮助你创建更为复杂和高效的安装包。以下是大纲内容:

1. Inno Setup基础回顾与进阶

  • 回顾: 概述基础功能与脚本结构,强调常见的安装包类型。
  • 进阶技巧:
    • 介绍如何优化基础功能,实现更高效的构建与发布流程。

2. 高级脚本编写

  • 复杂脚本结构:
    • 高级自定义脚本的架构设计与模块化方法。
    • 使用外部配置文件(如INI、XML)存储脚本参数,提高可维护性。
  • 内置函数与自定义函数的结合:
    • 如何更高效地利用内置函数进行文件操作、系统检测等。
    • 通过自定义函数、类库等来扩展Inno Setup的功能。

3. 深度自定义安装界面

  • 动态UI组件:
    • 深入自定义对话框与UI控件,实现高级界面交互。
    • 设计具有丰富交互功能的界面,如多步骤向导、动态组件显示。
  • 样式与动画:
    • 运用图形库和动画技术来增强界面体验。

4. 多平台与高级多版本支持

  • 复杂平台支持:
    • 配置支持多平台的安装包,如支持跨Windows与Linux平台。
    • 使用高级平台特定的优化策略,提高跨平台兼容性。
  • 自定义版本管理:
    • 为不同版本(如家庭版、企业版)创建专用的安装程序,并根据许可动态选择功能。

5. 文件操作与权限管理进阶

  • 高级文件操作:
    • 实现文件的增量更新、备份与恢复操作,支持云端同步等。
    • 高级文件操作管理,避免文件冲突、文件版本管理。
  • 细粒度权限控制:
    • 设定多层次权限管理,包括用户权限、系统权限等。
    • 自动提升管理员权限,适配不同的操作系统版本(如Win10/11与Server版本)。

6. 深度注册表与系统环境管理

  • 注册表高级操作:
    • 动态读取与更新注册表数据,支持操作系统和安装环境变化。
  • 系统环境变量管理:
    • 动态添加、修改系统环境变量,如PATH等,并确保其在不同的终端有效。

7. 定制卸载与清理功能

  • 智能卸载:
    • 配置卸载过程中执行的数据清理与恢复任务,避免残留文件或注册表项。
    • 定制卸载条件,根据用户选择的功能决定是否完全卸载或保留部分文件。

8. 加密、安全与防破解

  • 多层加密:
    • 深度加密机制,防止安装文件和安装过程被篡改。
    • 配合硬件绑定与序列号验证,防止未授权访问。
  • 反破解保护:
    • 在脚本中集成反破解机制,防止逆向工程。

9. 自动更新与网络安装高级功能

  • 支持在线安装:
    • 自定义网络下载文件的机制,支持通过HTTP、FTP等协议进行文件下载。
    • 自动检测并下载最新版本,提高软件的长期兼容性。
  • 增量更新:
    • 基于版本号或时间戳实现增量更新,只下载差异文件,节省带宽。

10. 调试与性能优化

  • 高级调试:
    • 使用高级调试工具对安装包进行性能分析,定位瓶颈。
  • 压缩与并行处理:
    • 运用多线程、并行处理技术,优化安装速度。
    • 高效的文件压缩策略,确保快速的文件传输与解压。

11. 打包与发布

  • 高度定制的打包策略:
    • 支持创建多个子安装包,基于用户选择进行自定义构建。
    • 自动化打包和发布工作流,集成到CI/CD环境中。
  • 动态发布:
    • 实现多平台、多版本的安装包发布,自动选择最优发布路径。

12. 总结与未来发展

  • 进阶学习:
    • 深入分析Inno Setup的高级特性及其未来趋势。
  • 社区与资源:
    • 参与开发社区,贡献自己的扩展与插件,进一步提升安装包的功能与兼容性。

附录

  • 扩展插件:
    • 列出一些高效的Inno Setup插件,增强安装包的功能,如日志管理、动态加载模块等。
  • 错误与性能问题解决:
    • 分析高级用户可能遇到的问题,并提供解决方案和优化建议。

通过此教程,你将能够掌握Inno Setup的高级功能,创建更为复杂、个性化的安装程序。


Inno Setup》顶尖级使用教程大纲,专注于为你提供更为深入的安装包定制技巧,并帮助你应对最复杂的安装需求:

1. 深入了解Inno Setup架构

  • 高级脚本结构解析:
    • 详细分析Inno Setup的内部工作原理,理解其架构和设计模式。
    • 探索Inno Setup的执行流程,从脚本解析到实际安装过程。
  • 最佳实践:
    • 讨论如何优化脚本的可维护性、可扩展性,以及多平台支持。

2. 顶尖脚本编写技巧

  • 复杂的脚本模块化:
    • 通过模块化设计提高脚本的复用性,使用外部脚本文件进行分离与管理。
    • 详细讲解如何创建通用的函数库和类来扩展Inno Setup的功能。
  • 动态功能扩展:
    • 使用脚本动态生成安装流程、对话框、组件等元素。
    • 跨越系统环境限制,编写平台相关代码。

3. 超定制安装界面设计

  • 高级UI定制:
    • 深入自定义对话框、按钮、文本框等控件,设计丰富的用户交互。
    • 实现自定义的多步骤安装流程以及交互式动态组件。
  • 动画与图形:
    • 运用图形库和动画技术,让安装界面更具吸引力,提升用户体验。

4. 多平台兼容性与版本管理

  • 跨平台支持:
    • 创建能够在不同平台(Windows、Linux)上兼容的安装包。
    • 针对不同平台优化安装脚本,支持不同操作系统的安装特性。
  • 版本管理:
    • 动态选择版本(例如:专业版、企业版)并根据用户需求安装相关组件。

5. 高效文件操作与权限控制

  • 增量更新与备份:
    • 实现文件增量更新,确保用户的文件与配置始终保持最新。
    • 提供备份恢复方案,支持云同步与本地备份。
  • 权限与安全:
    • 精细化控制用户权限、系统权限以及安装文件的权限管理。
    • 实现动态权限提升,适应不同的操作系统和权限要求。

6. 注册表与系统环境高级管理

  • 动态注册表操作:
    • 高效管理注册表,动态读取、更新或删除注册表项。
    • 提供不同操作系统版本下的兼容性处理。
  • 系统环境变量管理:
    • 支持自动配置系统环境变量(如PATH),确保不同终端的一致性。

7. 智能卸载与清理机制

  • 定制卸载功能:
    • 在卸载过程中处理复杂的清理任务,确保无残留文件或注册表项。
    • 实现“智能卸载”功能,根据用户需求清理安装过程中产生的不同数据。

8. 加密与防破解机制

  • 强化加密:
    • 提供多层加密方案,保护安装包不被篡改。
    • 配合硬件绑定和序列号验证,确保合法授权。
  • 反破解保护:
    • 集成防破解技术,防止逆向工程和破解安装包。

9. 自动更新与在线安装

  • 在线安装机制:
    • 自定义文件下载机制,支持通过HTTP、FTP协议进行文件下载。
    • 增量更新功能,只下载必要的差异文件,提高网络安装效率。
  • 自动版本更新:
    • 自动检测和更新最新版本,确保用户始终获得最新功能。

10. 安装包调试与性能优化

  • 深入调试与性能分析:
    • 使用专业的调试工具对安装包进行性能分析,定位性能瓶颈。
    • 针对复杂安装包进行优化,确保安装过程流畅高效。
  • 并行处理与多线程:
    • 运用并行处理和多线程技术,提升安装速度,优化安装体验。

11. 打包与发布策略

  • 高度定制打包:
    • 根据用户需求创建多版本、多平台安装包,灵活选择需要的组件。
    • 实现自动化的打包流程,集成CI/CD系统,提高开发效率。
  • 动态发布:
    • 支持根据不同环境自动选择最合适的发布路径,确保跨平台的发布顺利进行。

12. 总结与未来展望

  • Inno Setup未来趋势:
    • 深入分析Inno Setup的未来发展方向,探索可能的新功能与优化。
  • 参与社区:
    • 如何贡献插件与扩展,增强Inno Setup的功能和社区支持。

附录

  • 插件推荐:
    • 列出一些有用的Inno Setup插件,如日志记录、动态组件加载等,帮助提高安装包的功能。
  • 常见问题与解决方案:
    • 汇总一些高级用户常遇到的问题,并提供优化解决方案。

这个教程将帮助你掌握Inno Setup的顶尖功能,开发出更加复杂、个性化的安装程序,满足企业级需求。


Inno Script Studio 是一个 Windows 安装包脚本编写工具,可以帮助用户生成 Windows 安装程序的脚本。对于初学者来说,理解它的基本结构和常用命令非常重要。以下是一个 Inno Script Studio 初级代码示例大纲,帮助你快速上手:

1. 脚本的基本结构

 
; Inno Setup Script Example

[Setup]
; 安装程序的基本设置
AppName=MyApp
AppVersion=1.0
DefaultDirName={pf}\MyApp
DefaultGroupName=MyApp
OutputBaseFilename=MyAppInstaller
Compression=lzma
SolidCompression=yes

[Files]
; 指定需要包含的文件
Source: "C:\Path\To\Your\Application.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Path\To\Your\Library.dll"; DestDir: "{app}"; Flags: ignoreversion

[Icons]
; 创建快捷方式
Name: "{group}\MyApp"; Filename: "{app}\Application.exe"

[Registry]
; 注册表项(如果需要)
Root: HKCU; Subkey: "Software\MyApp"; ValueName: "InstallPath"; ValueData: "{app}"

[Run]
; 安装后运行程序
Filename: "{app}\Application.exe"; Description: "Launch MyApp"; Flags: nowait postinstall skipifsilent

2. 各个部分的说明

[Setup]

  • AppName: 安装程序的名称。
  • AppVersion: 应用程序的版本。
  • DefaultDirName: 默认的安装目录,{pf} 表示 "Program Files"。
  • DefaultGroupName: 默认的开始菜单组。
  • OutputBaseFilename: 安装程序输出的文件名。
  • Compression: 安装包的压缩格式。
  • SolidCompression: 启用固态压缩,提高安装包的压缩效率。

[Files]

  • 这一部分列出了安装过程中需要包含的文件。
  • Source 是文件路径,DestDir 是目标路径,Flags 可以指定一些特殊选项,如 ignoreversion 忽略文件版本。

[Icons]

  • 这一部分创建快捷方式。{group} 表示开始菜单的组,{app} 表示应用程序的安装目录。

[Registry]

  • 在注册表中创建一个条目,存储应用程序的安装路径。

[Run]

  • 安装完成后运行指定程序。nowait 表示不等待程序运行结束,postinstall 表示安装后运行。

3. 使用 Inno Script Studio 进行可视化编辑

Inno Script Studio 提供了一个图形界面来简化脚本编写。你可以通过它设置各种安装选项,如文件复制、快捷方式创建、注册表修改等,而无需手动编写代码。

4. 常用的 Inno Setup 脚本命令

  • ; : 注释符号,用于注释代码。
  • {app}: 应用程序的安装目录。
  • {pf}: 程序文件夹,通常指的是“Program Files”。
  • Flags: ignoreversion : 忽略版本检查,强制覆盖文件。
  • Filename: {app}\YourApp.exe : 安装完成后运行指定的可执行文件。

这个大纲和示例是一个简单的 Inno Setup 脚本模板,适合初学者进行基本安装程序创建。你可以根据需要修改文件路径、安装选项和其他配置。


1. 增强的定制化脚本示例

 
; Inno Setup 高级脚本示例

[Setup]
AppName=MyAdvancedApp
AppVersion=2.0
DefaultDirName={pf}\MyAdvancedApp
DefaultGroupName=MyAdvancedApp
OutputBaseFilename=MyAdvancedAppInstaller
Compression=lzma
SolidCompression=yes
AppPublisher=My Company
AppPublisherURL=http://mycompany.com
AppSupportURL=http://support.mycompany.com
AppUpdatesURL=http://updates.mycompany.com

[Files]
Source: "C:\Path\To\Your\Application.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Path\To\Your\Library.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Path\To\Docs\ReadMe.txt"; DestDir: "{app}\Docs"; Flags: onlyifdoesntexist

[Icons]
Name: "{group}\MyAdvancedApp"; Filename: "{app}\Application.exe"
Name: "{desktop}\MyAdvancedApp"; Filename: "{app}\Application.exe"; Tasks: desktopicon

[Registry]
Root: HKCU; Subkey: "Software\MyAdvancedApp"; ValueName: "InstallPath"; ValueData: "{app}"

[Run]
Filename: "{app}\Application.exe"; Description: "Launch MyAdvancedApp"; Flags: nowait postinstall skipifsilent

[Tasks]
Name: desktopicon; Description: "Create a desktop icon"; GroupDescription: "Additional Icons"; Types: full

2. 新特性与定制化解释

[Setup]

  • AppPublisher: 指定应用程序的发布者。
  • AppPublisherURL, AppSupportURL, AppUpdatesURL: 提供用户访问支持或更新的URL。

[Files]

  • onlyifdoesntexist: 一个标志,防止文件在目标目录中已存在时被覆盖。

[Icons]

  • Tasks: desktopicon: 在安装过程中添加创建桌面快捷方式的选项。你可以控制是否在安装过程中创建桌面图标。

[Tasks]

  • 新增的部分,允许用户选择其他功能,如创建桌面图标等。

3. 使用 Inno Script Studio 进行可视化编辑

如果你更习惯可视化脚本,Inno Script Studio 提供了一个易于使用的图形界面来生成脚本。你可以选择以下操作:

  • 选择需要包含的文件。
  • 选择安装目录和注册表设置。
  • 配置安装后运行程序等后续操作。

4. 探索的其他功能

  • 卸载部分: 你也可以添加 [Uninstall] 部分来指定应用程序的卸载方式。
  • 条件: 使用条件确保根据用户输入或系统配置执行特定操作。
  • 多语言支持: Inno Setup 支持多语言设置,允许你为安装过程指定不同的语言。

这个脚本示例展示了如何更灵活地定制安装程序,包括安装程序的高级配置、文件处理、注册表项、桌面快捷方式以及用户选择任务等内容。


一个Inno Script Studio高级代码示例的大纲,包含了更多高级功能,如条件判断、注册表操作、多个任务等。这个大纲展示了如何定制安装过程,使其更具灵活性和功能性。


1. 安装设置部分 (Setup)

 
[Setup]
AppName=MyAdvancedApp
AppVersion=2.0
DefaultDirName={pf}\MyAdvancedApp
DefaultGroupName=MyAdvancedApp
OutputBaseFilename=MyAdvancedAppInstaller
Compression=lzma
SolidCompression=yes
AppPublisher=My Company
AppPublisherURL=http://mycompany.com
AppSupportURL=http://support.mycompany.com
AppUpdatesURL=http://updates.mycompany.com
DisableProgramGroupPage=yes
DefaultUserName=MyAppUser
  • AppPublisherURL, AppSupportURL, AppUpdatesURL:为用户提供相关的支持和更新网址。
  • DisableProgramGroupPage:禁用“程序组”页面,防止用户在安装过程中自定义程序组。
  • DefaultUserName:设置默认用户名。

2. 文件操作部分 (Files)

 
[Files]
Source: "C:\Path\To\Your\Application.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Path\To\Your\Library.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Path\To\Docs\ReadMe.txt"; DestDir: "{app}\Docs"; Flags: onlyifdoesntexist
Source: "C:\Path\To\Setup\Installer.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall
  • ignoreversion:忽略版本检查,允许安装程序覆盖已有文件。
  • onlyifdoesntexist:仅在目标目录没有文件时才复制文件。
  • deleteafterinstall:安装完成后删除临时文件。

3. 图标创建部分 (Icons)

 
[Icons]
Name: "{group}\MyAdvancedApp"; Filename: "{app}\Application.exe"
Name: "{desktop}\MyAdvancedApp"; Filename: "{app}\Application.exe"; Tasks: desktopicon
Name: "{group}\Uninstall MyAdvancedApp"; Filename: "{uninstallexe}"; IconFilename: "{app}\Uninstall.ico"
  • Tasks: desktopicon:在安装时提供是否创建桌面快捷方式的选项。
  • {uninstallexe}:卸载程序的路径。
  • IconFilename:指定卸载程序图标。

4. 注册表操作部分 (Registry)

 
[Registry]
Root: HKCU; Subkey: "Software\MyAdvancedApp"; ValueName: "InstallPath"; ValueData: "{app}"
Root: HKCU; Subkey: "Software\MyAdvancedApp"; ValueName: "InstallDate"; ValueData: "{date}"
Root: HKLM; Subkey: "Software\Microsoft\Windows\CurrentVersion\Uninstall\MyAdvancedApp"; ValueName: "DisplayName"; ValueData: "MyAdvancedApp"
Root: HKLM; Subkey: "Software\Microsoft\Windows\CurrentVersion\Uninstall\MyAdvancedApp"; ValueName: "UninstallString"; ValueData: "{uninstallexe}"
  • InstallPath:记录应用程序的安装路径。
  • InstallDate:记录安装日期。
  • DisplayName:在卸载时显示的名称。
  • UninstallString:卸载程序的路径。

5. 条件判断部分 (Conditionals)

 
[Code]
function IsWin64: Boolean;
begin
  Result := Is64BitInstallMode;
end;

[Files]
Source: "C:\Path\To\Your\64bitApp.exe"; DestDir: "{app}"; Flags: onlyifdoesntexist; Conditions: IsWin64
Source: "C:\Path\To\Your\32bitApp.exe"; DestDir: "{app}"; Flags: onlyifdoesntexist; Conditions: not IsWin64
  • Is64BitInstallMode:检查当前操作系统是否为64位。
  • Conditions:根据操作系统架构选择不同的应用程序版本进行安装。

6. 运行程序部分 (Run)

 
[Run]
Filename: "{app}\Application.exe"; Description: "Launch MyAdvancedApp"; Flags: nowait postinstall skipifsilent
Filename: "{app}\PostInstallApp.exe"; Description: "Run Post Install Task"; Flags: runhidden
  • nowait:启动程序后不等待安装程序完成。
  • postinstall:仅在安装完成后运行该程序。
  • runhidden:以隐藏方式运行程序。

7. 自定义任务部分 (Tasks)

 
[Tasks]
Name: desktopicon; Description: "Create a desktop icon"; GroupDescription: "Additional Icons"; Types: full
Name: startapp; Description: "Start the application after installation"; GroupDescription: "Additional Tasks"; Types: full
  • desktopicon:允许用户选择是否创建桌面图标。
  • startapp:允许用户选择是否在安装完成后启动应用程序。

8. 卸载部分 (Uninstall)

 
[Uninstall]
Delete: "{app}\Uninstall.ico"
Delete: "{app}\MyAdvancedApp.exe"
Registry: HKCU\Software\MyAdvancedApp
  • Delete:卸载时删除指定文件。
  • Registry:卸载时删除注册表项。

总结

这个高级脚本大纲展示了如何通过 Inno Script Studio 进行更复杂的安装程序定制:

  1. 安装设置部分:设定安装目录、安装文件压缩方式、应用程序发布者等。
  2. 文件操作:处理文件的复制、覆盖、临时文件删除等。
  3. 图标创建:在开始菜单、桌面创建快捷方式,并配置卸载程序图标。
  4. 注册表操作:记录安装信息,并在卸载时提供必要的清理。
  5. 条件判断:根据系统环境(如操作系统架构)选择不同的安装文件。
  6. 运行程序:控制安装完成后的程序运行。
  7. 自定义任务:添加用户自定义任务,如创建桌面图标或启动应用程序。
  8. 卸载部分:处理应用程序卸载时的文件和注册表清理。

通过这种方式,Inno Script Studio 可以创建一个功能丰富、灵活的安装程序,能够满足各种不同的需求。


Inno Script Studio 是一款用于创建 Windows 安装程序的工具,使用的是 Inno Setup 脚本语言。下面是一些高级技巧和代码示例大纲,帮助你更好地利用 Inno Script Studio 创建复杂的安装程序。

1. 自定义安装界面

  • 修改默认界面的外观和布局。
  • 使用 wizard 页,添加图片、文本框和按钮。
  • 代码示例:
pascal
[Code]
procedure InitializeWizard();
begin
  // 设置自定义标题
  WizardForm.Caption := 'My Custom Installer';
  // 设置背景图片
  WizardForm.Background := 'C:\path\to\background.bmp';
end;

2. 安装前检测系统

  • 在安装前检查目标计算机的环境,如操作系统版本、磁盘空间等。
  • 代码示例:
pascal
[Code]
function CheckSystemRequirements: Boolean;
begin
  // 检查操作系统版本
  if (Win32MajorVersion < 6) then
  begin
    MsgBox('This installer requires Windows 7 or later!', mbError, MB_OK);
    Result := False;
  end
  else
    Result := True;
end;

procedure InitializeWizard();
begin
  if not CheckSystemRequirements then
  begin
    Abort;
  end;
end;

3. 自定义安装路径

  • 根据用户输入或系统环境自动设置默认安装路径。
  • 代码示例:
pascal
[Setup]
DefaultDirName={autopf}\MyApp

[Code]
procedure InitializeWizard();
begin
  if not DirExists('C:\MyCustomPath') then
    WizardForm.DirEdit.Text := 'C:\MyCustomPath'
  else
    WizardForm.DirEdit.Text := 'C:\Program Files\MyApp';
end;

4. 在安装过程中运行外部程序

  • 在安装过程中或安装后运行额外的程序,如注册表编辑、第三方软件安装等。
  • 代码示例:
pascal
[Run]
Filename: "{app}\MyApp.exe"; Parameters: "/install"; StatusMsg: "Installing the application...";

[Code]
procedure CurStepChanged(CurStep: TSetupStep);
begin
  if (CurStep = ssPostInstall) then
  begin
    Exec('C:\path\to\external_program.exe', '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
  end;
end;

5. 注册表操作

  • 在安装时添加或修改注册表项。
  • 代码示例:
pascal
[Registry]
Root: HKCU; Subkey: "Software\MyApp"; ValueType: string; ValueName: "InstallDir"; ValueData: "{app}";

[Code]
procedure RegisterAppInRegistry();
begin
  RegWriteStringValue(HKEY_CURRENT_USER, 'Software\MyApp', 'InstallDir', ExpandConstant('{app}'));
end;

procedure InitializeWizard();
begin
  RegisterAppInRegistry();
end;

6. 动态添加安装文件

  • 根据条件(例如,操作系统类型或用户选择)动态添加不同的安装文件。
  • 代码示例:
pascal
[Files]
Source: "C:\path\to\common_files\*"; DestDir: "{app}\CommonFiles"; Flags: recursesubdirs;
Source: "C:\path\to\windows_files\*"; DestDir: "{app}\WindowsFiles"; Flags: recursesubdirs; Condition: {sys} == 'Win32';

7. 高级错误处理

  • 捕获并处理安装过程中的错误,提供用户反馈。
  • 代码示例:
pascal
[Code]
procedure HandleInstallationError(ErrorCode: Integer);
begin
  case ErrorCode of
    1: MsgBox('Error: Installation failed due to insufficient disk space.', mbError, MB_OK);
    2: MsgBox('Error: The required .NET Framework is not installed.', mbError, MB_OK);
  else
    MsgBox('An unknown error occurred during installation.', mbError, MB_OK);
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssInstall then
  begin
    if not FileExists('C:\path\to\required_file.dll') then
      HandleInstallationError(1);
  end;
end;

8. 多语言支持

  • 为安装程序添加多语言支持,自动根据系统语言选择合适的语言文件。
  • 代码示例:
pascal
[Languages]
Name: "english"; MessagesFile: "compiler:Languages\English.isl";
Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl";

[Code]
procedure InitializeWizard();
begin
  if GetCurrentLanguage = 'spanish' then
    WizardForm.DescriptionLabel.Caption := 'Instalando Mi Aplicación';
end;

9. 卸载过程

  • 自定义卸载过程,删除安装过程中创建的所有文件和注册表项。
  • 代码示例:
pascal
[UninstallDelete]
Type: files; Name: "{app}\MyApp.exe";
Type: regkey; Name: "Software\MyApp";

10. 自定义安装步骤

  • 插入自定义步骤,例如输入序列号、接受许可协议等。
  • 代码示例:
pascal
[Code]
var
  SerialNumber: String;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
  if CurPageID = wpWelcome then
  begin
    if SerialNumber = '' then
    begin
      MsgBox('Please enter a serial number to continue.', mbError, MB_OK);
      Result := False;
      Exit;
    end;
  end;
  Result := True;
end;

procedure InitializeWizard();
begin
  SerialNumber := '';
end;

这些技巧能帮助你更灵活地创建复杂的安装程序,定制每个安装步骤,增强用户体验。


11. 自定义文件压缩

在安装过程中压缩文件以节省磁盘空间或带宽。 您可以指定压缩算法,如 lzma 来减少文件大小。 示例:

pascal
[Setup]
Compression=lzma
SolidCompression=yes

12. 基于用户输入的自定义安装动作

根据用户在安装过程中做出的选择执行自定义操作。 示例:根据用户选择(例如选择“精简版”或“完整版”)显示或隐藏文件。

pascal
[CustomMessages]
ChooseOption=请选择安装类型:

[Code]
var
  InstallType: String;

procedure InitializeWizard();
begin
  InstallType := 'Full'; // 默认
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
  if CurPageID = wpSelectDir then
  begin
    if InstallType = 'Lite' then
      WizardForm.DirEdit.Text := 'C:\LiteVersion'
    else
      WizardForm.DirEdit.Text := 'C:\FullVersion';
  end;
  Result := True;
end;

13. 高级错误处理与日志记录

使用详细的错误日志来跟踪安装过程中的问题并更快地解决它们。 示例:

pascal
[Code]
procedure LogInstallationError(ErrorCode: Integer; ErrorMessage: String);
begin
  Log('Error ' + IntToStr(ErrorCode) + ': ' + ErrorMessage);
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssInstall then
  begin
    if not FileExists('C:\path\to\required_file.dll') then
      LogInstallationError(1, '缺少必要的DLL文件。');
  end;
end;

14. 与 Windows 防火墙或 UAC 的集成

如果您的应用程序需要防火墙访问或提升权限,您可以在安装过程中处理这些需求。 示例:

pascal
[Code]
procedure CheckFirewallAccess();
begin
  // 检查并配置防火墙访问
  // 添加防火墙规则或请求管理员权限
  MsgBox('请确保防火墙允许该程序通过。', mbInformation, MB_OK);
end;

procedure InitializeWizard();
begin
  CheckFirewallAccess();
end;

15. 用户界面定制:添加自定义进度条

定制安装进度条,提供更个性化的体验。 示例:

pascal
[Code]
procedure UpdateProgressBar();
begin
  WizardForm.ProgressBar.Position := WizardForm.ProgressBar.Position + 1;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssInstall then
  begin
    UpdateProgressBar();
  end;
end;

16. 安装程序修补

对于修补或更新现有安装,您可以使用条件步骤检查是否安装了旧版本,并仅复制必要的新文件。 示例:

pascal
[Files]
Source: "C:\path\to\new_version\*"; DestDir: "{app}"; Flags: onlyifdoesntexist;

这些附加技术将帮助您进一步定制安装程序,使其在不同的用户场景下更加动态和健壮。

 

posted @ 2024-12-09 00:02  suv789  阅读(3139)  评论(0)    收藏  举报