wix 托管引导程序:回滚失败

Posted

技术标签:

【中文标题】wix 托管引导程序:回滚失败【英文标题】:wix Managed bootstrapper: Rollback failing 【发布时间】:2013-05-29 15:55:30 【问题描述】:

我的托管引导程序中链接了多个 EXECPackage,例如:

<ExePackage Id="Test1" SourceFile="D:\Test\TestBatch.bat" Vital="yes" Compressed="yes" 
              InstallCommand="Testinstall1"
              UninstallCommand="Testuninstall1"
              />
<ExePackage Id="Test2" .../>

我希望我的回滚能够执行卸载命令。 生成的日志文件有以下信息:

回滚:卸载。应用回滚包:Test2,动作: 卸载,路径:C:\ProgramData\Package 缓存\AD944C8E8D75C79F57819C331F46D15B4CFD9172\TestBatch.bat, 参数:'"C:\ProgramData\Package 缓存\AD944C8E8D75C79F57819C331F46D15B4CFD9172\TestBatch.bat" Testuninstall2' [24F4:246C][2013-06-05T14:45:10]e000:错误 0x80070003: 无法在路径上创建进程:C:\ProgramData\Package 缓存\AD944C8E8D75C79F57819C331F46D15B4CFD9172\TestBatch.bat [24F4:246C][2013-06-05T14:45:10]e000:错误 0x80070003:未能 执行EXE包。 [1654:27A8][2013-06-05T14:45:10]e000:错误 0x80070003: 配置单机EXE包失败。

我意识到当触发回滚 (Result.Cancel) 时,包含 Exe 包负载的缓存文件夹会从C:\ProgramData\Package Cache 中删除。

不过这在以前是可行的。

【问题讨论】:

【参考方案1】:

如果正在安装包,UninstallCommand 将在回滚时执行。我已经看到当同一个可执行文件用于单个Chain 中的多个ExePackage 元素时会出现此问题。 Burn 引擎缓存包的方式使用可执行文件的哈希来确定位置。因此,如果您将相同的可执行文件放在Chain 中,它可能会被提前删除。确保每个可执行包在您的 Bundle 中都是唯一的。

PS:强烈建议你有DetectCondition on the ExePackage

【讨论】:

以上是关于wix 托管引导程序:回滚失败的主要内容,如果未能解决你的问题,请参考以下文章

托管的 WiX 引导程序包

Wix 托管引导程序应用程序:通过捆绑将变量传递给 msi

[Wix Bundle Managed Bootstrapper]错误 0x80070002:无法创建托管引导程序应用程序

如何从Wix托管引导程序或自定义操作中读取某些注册表项?

Wix3.7 自定义引导程序不显示主题库中的 WPF 主题

托管引导程序应用程序“无法解析文件源”