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

时间:2013-05-29 15:55:30

标签: wix wix3.6 wix-extension wix3.7

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

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

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

  

回滚:卸载。应用回滚包:Test2,action:   卸载,路径:C:\ ProgramData \ Package   缓存\ AD944C8E8D75C79F57819C331F46D15B4CFD9172 \ TestBatch.bat,   参数:'“C:\ ProgramData \ Package   缓存\ AD944C8E8D75C79F57819C331F46D15B4CFD9172 \ TestBatch.bat”   Testuninstall2'[24F4:246C] [2013-06-05T14:45:10] e000:错误   0x80070003:路径上的CreateProcess失败: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 个答案:

答案 0 :(得分:3)

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

PS:强烈建议您拥有DetectCondition on the ExePackage