installerbuilder/tasks/task12-MSI包构建器.md

5.0 KiB
Raw Blame History

任务12MSI包构建器

任务描述

实现Windows MSI安装包的构建器负责生成Windows平台的MSI安装包。MSI包构建器将处理MSI文件的生成、安装脚本集成、文件和目录结构创建等功能确保生成的MSI安装包符合Windows安装标准。

实现步骤

  1. 定义包构建器接口:

    • internal/builder/package包中创建builder.go文件
    • 定义PackageBuilder接口
      type PackageBuilder interface {
          // Build 构建安装包
          Build(config *config.Config, target config.Target) (*BuildResult, error)
      
          // GetSupportedPlatforms 获取支持的平台
          GetSupportedPlatforms() []string
      
          // GetSupportedPackageTypes 获取支持的包类型
          GetSupportedPackageTypes() []string
      }
      
    • 定义BuildResult结构体
      type BuildResult struct {
          Target      config.Target // 构建目标
          OutputPath  string        // 输出文件路径
          Success     bool          // 是否成功
          Error       error         // 错误信息
          BuildTime   time.Duration // 构建时间
      }
      
  2. 创建MSI包构建器

    • internal/builder/package/msi包中创建builder.go文件
    • 定义MSIBuilder结构体实现PackageBuilder接口
      type MSIBuilder struct {
          tempDir         string
          platformAdapter platform.PlatformAdapter
          resourceMgr     resource.ResourceManager
          logger          log.Logger
          wixPath         string // WiX工具集路径
      }
      
    • 实现构造函数:
      func NewMSIBuilder(platformAdapter platform.PlatformAdapter, resourceMgr resource.ResourceManager, logger log.Logger) (*MSIBuilder, error) {
          tempDir, err := resourceMgr.CreateTempDir("msi-builder")
          if err != nil {
              return nil, err
          }
      
          wixPath, err := findWixToolset()
          if err != nil {
              return nil, err
          }
      
          return &MSIBuilder{
              tempDir:         tempDir,
              platformAdapter: platformAdapter,
              resourceMgr:     resourceMgr,
              logger:          logger,
              wixPath:         wixPath,
          }, nil
      }
      
  3. 实现WiX工具集检测

    • 创建findWixToolset函数检测WiX工具集安装
    • 支持环境变量配置WiX路径
    • 处理WiX工具集不存在的情况
  4. 实现构建方法:

    • 实现Build方法构建MSI安装包
    • 验证构建目标和配置
    • 准备构建环境
    • 生成WiX源文件
    • 编译WiX源文件生成MSI
    • 处理构建结果
  5. 实现WiX源文件生成

    • 创建generateWixSource方法生成WiX源文件.wxs
    • 包含产品信息、目录结构、组件定义
    • 支持自定义UI和对话框
    • 集成安装前后脚本
  6. 实现文件和目录处理:

    • 创建处理文件和目录的方法
    • 生成文件和目录的WiX定义
    • 处理文件权限和属性
    • 支持快捷方式创建
  7. 实现安装脚本集成:

    • 创建集成安装前后脚本的方法
    • 支持自定义操作Custom Action
    • 处理脚本执行结果
    • 支持条件执行
  8. 实现升级支持:

    • 添加升级GUID生成
    • 支持主要升级和次要升级
    • 处理版本比较和升级路径
    • 支持卸载旧版本

单元测试要求

  1. 测试WiX工具集检测

    • 验证WiX工具集检测功能
    • 测试环境变量配置
    • 测试工具集不存在的处理
  2. 测试构建方法:

    • 验证构建流程
    • 测试配置验证
    • 测试环境准备
    • 测试构建结果处理
  3. 测试WiX源文件生成

    • 验证WiX源文件生成
    • 测试产品信息和目录结构
    • 测试组件定义
    • 测试UI和对话框
  4. 测试文件和目录处理:

    • 验证文件和目录处理
    • 测试文件权限和属性
    • 测试快捷方式创建
  5. 测试安装脚本集成:

    • 验证脚本集成功能
    • 测试自定义操作
    • 测试脚本执行结果处理
    • 测试条件执行
  6. 测试升级支持:

    • 验证升级GUID生成
    • 测试版本比较
    • 测试升级路径
    • 测试卸载旧版本

依赖关系

  • 依赖任务01项目初始化
  • 依赖任务02日志系统实现
  • 依赖任务03错误处理框架
  • 依赖任务04资源管理器实现
  • 依赖任务05配置模型定义
  • 依赖任务10Windows平台适配器
  • 被任务19默认构建协调器依赖

完成标准

  1. PackageBuilder接口已定义并文档完善
  2. MSIBuilder实现了所有接口方法
  3. WiX工具集检测功能正常工作
  4. 构建方法能够成功生成MSI安装包
  5. WiX源文件生成功能正常工作
  6. 文件和目录处理功能正常工作
  7. 安装脚本集成功能正常工作
  8. 升级支持功能正常工作
  9. 所有单元测试通过
  10. 代码符合项目的Go语言开发规范
  11. 生成的MSI安装包符合Windows安装标准
  12. 支持所有需求文档中的MSI相关功能