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

165 lines
5.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 任务12MSI包构建器
## 任务描述
实现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配置模型定义
- 依赖任务10Windows平台适配器
- 被任务19默认构建协调器依赖
## 完成标准
1. PackageBuilder接口已定义并文档完善
2. MSIBuilder实现了所有接口方法
3. WiX工具集检测功能正常工作
4. 构建方法能够成功生成MSI安装包
5. WiX源文件生成功能正常工作
6. 文件和目录处理功能正常工作
7. 安装脚本集成功能正常工作
8. 升级支持功能正常工作
9. 所有单元测试通过
10. 代码符合项目的Go语言开发规范
11. 生成的MSI安装包符合Windows安装标准
12. 支持所有需求文档中的MSI相关功能