2017-07-25 122 views
0

我有一个现有的WIX安装程序文件,我试图弄清楚。在这个文件中我看到定义了两个自定义操作:从远程位置WIX升级方案

<Custom Action="CreateBackup"  Before="InstallInitialize">    
    <![CDATA[Installed]]> 
</Custom> 

<Custom Action="RestoreBackup" After= "InstallFinalize"> 
    <![CDATA[NOT Installed]]> 
</Custom> 

的CreateBackup功能拷贝一些文件(不直接相关的安装程序)。恢复将这些文件放回到相同的位置。

现在在升级场景中,我看到以下日志记录顺序。我已经把的 “安装” 表面价值括号:

  • CreateBackup被跳过(安装==假)
  • InstallInit
  • CreateBackup成功(安装==真)
  • InstallInit
  • InstallFinalize
  • RestoreBackup被跳过(安装== true)
  • InstallFinalize
  • RestoreBackup成功(安装==假)

我有一个关于这几个问题:

  • 据我所知,有一个卸载和安装在该脚本中去。根据“已安装”的价值,我得出结论:安装是先完成的。它是否正确?
  • 我看到InstallInit在第一次InstallFinalize之前调用两次。这是什么意思?卸载开始时安装仍然很忙?
  • Installed的第一个值是false,所以我猜它是相对于新版本的?但是卸载完成后又如何变成虚假?那么它是否与旧版本相关?

我正在使用一个MajorUpgrade元素。

希望有人能清楚这一点。

回答

1

我假设你使用的是维克斯MajorUpgrade元素做你的升级,所以你需要的条件应该是这样的:

当你正在做一个升级WIX_UPGRADE_DETECTED属性设置时升级正在做:当你想创建备份

http://wixtoolset.org/documentation/manual/v3/xsd/wix/majorupgrade.html

所以使用条件,假设你想要做的现有文件的备份(从旧产品)做升级时。

从您的文章中不清楚您想要执行还原的时间,但是如果升级之后使用相同的WIX_UPGRADE_DETECTED属性。

基于Installed属性的这些条件似乎没有什么意义,因为如果安装了当前MSI的ProductCode,则设置该属性。在该阶段的升级中,它将始终未设置。

这篇文章有关于性能的详细信息和安装操作:

How to add a WiX custom action that happens only on uninstall (via MSI)?

+0

这的确是一个majorupgrade元素。我不知道这是相关的:)。我实际上并没有试图解决某些问题,我想了解当前实现的流程。在升级过程中,“已安装”属性如何更改?备份和还原的作用是从磁盘上的远程位置(不直接与此安装程序相关)中保存一些文件。恢复将这些文件放回。我已经更新了我的问题,使其更清晰一些。 – Frank