165 lines
5.0 KiB
Markdown
165 lines
5.0 KiB
Markdown
# 任务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相关功能 |