【发布时间】:2013-02-20 17:02:18
【问题描述】:
我有一个使用 WIX 安装的产品。 这是我的安装顺序:
<InstallExecuteSequence>
<RemoveExistingProducts Before="InstallInitialize" />
</InstallExecuteSequence>
据我了解,在重新安装时会删除整个旧版本。 这是我要保留的行为,但我也想从中复制特定文件 旧版本。
我该怎么做?
【问题讨论】:
我有一个使用 WIX 安装的产品。 这是我的安装顺序:
<InstallExecuteSequence>
<RemoveExistingProducts Before="InstallInitialize" />
</InstallExecuteSequence>
据我了解,在重新安装时会删除整个旧版本。 这是我要保留的行为,但我也想从中复制特定文件 旧版本。
我该怎么做?
【问题讨论】:
几乎不可能从部署新的 MSI 中执行您想要的操作,因为您无法在需要提升权限的 RemoveExistingProducts 之前执行自定义操作(如果您没有安装在 UAC 控制的文件夹(如 prgram 文件)中,这可能会起作用 -但我从未尝试过)。
一种解决方法是通过创建引导程序来修改现有的 MSI(我不知道这是否可行!)– 请参阅此问题的答案:How to execute Custom Action before RemoveExistingProducts with After="InstallValidate" in WiX
当我过去编写安装程序时,我编写了一个自定义操作,将文件复制到卸载时的临时文件夹(升级时新 MSI 会调用旧版本 MSI 的卸载)和然后在安装新的 MSI 时检查并清除此文件夹(升级部分)。如果您只是卸载(而不是升级),这种方法确实会留下很多文件,但由于我只对配置文件感兴趣 - 这实际上效果很好,如果客户返回我不会丢失所有配置。
这当然不能解决您当前的问题,因为它只会在备份卸载相关文件的版本分发后才能开始工作 - 但在过去 3 年里它对我来说效果很好。
HTH
【讨论】: