# 任务12:MSI包构建器 ## 任务描述 实现Windows MSI安装包的构建器,负责生成Windows平台的MSI安装包。MSI包构建器将处理MSI文件的生成、安装脚本集成、文件和目录结构创建等功能,确保生成的MSI安装包符合Windows安装标准。 ## 实现步骤 1. 定义包构建器接口: - 在`internal/builder/package`包中创建`builder.go`文件 - 定义PackageBuilder接口: ```go type PackageBuilder interface { // Build 构建安装包 Build(config *config.Config, target config.Target) (*BuildResult, error) // GetSupportedPlatforms 获取支持的平台 GetSupportedPlatforms() []string // GetSupportedPackageTypes 获取支持的包类型 GetSupportedPackageTypes() []string } ``` - 定义BuildResult结构体: ```go 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接口: ```go type MSIBuilder struct { tempDir string platformAdapter platform.PlatformAdapter resourceMgr resource.ResourceManager logger log.Logger wixPath string // WiX工具集路径 } ``` - 实现构造函数: ```go 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(配置模型定义) - 依赖任务10(Windows平台适配器) - 被任务19(默认构建协调器)依赖 ## 完成标准 1. PackageBuilder接口已定义并文档完善 2. MSIBuilder实现了所有接口方法 3. WiX工具集检测功能正常工作 4. 构建方法能够成功生成MSI安装包 5. WiX源文件生成功能正常工作 6. 文件和目录处理功能正常工作 7. 安装脚本集成功能正常工作 8. 升级支持功能正常工作 9. 所有单元测试通过 10. 代码符合项目的Go语言开发规范 11. 生成的MSI安装包符合Windows安装标准 12. 支持所有需求文档中的MSI相关功能