3

我有一个使用 WIX 安装的产品。这是我的安装顺序:

<InstallExecuteSequence>
   <RemoveExistingProducts Before="InstallInitialize" />
</InstallExecuteSequence>

据我了解,在重新安装时会删除整个旧版本。这是我想保留的行为,但我也想从旧版本复制特定文件。

我该怎么做?

4

1 回答 1

1

从部署新的 MSI 中执行您想要的操作几乎是不可能的,因为您无法在需要提升权限的 RemoveExistingProducts 之前执行自定义操作(如果您没有安装在像 prgram 文件这样的 UAC 控制文件夹中,这可能会起作用 - 但我有从未尝试过)。

一种解决方法是通过创建引导程序来修改现有的 MSI(我不知道这是否可行!) - 请参阅此问题的答案:How to execute Custom Action before RemoveExistingProducts with After="InstallValidate" in WiX

当我过去编写安装程序时,我编写了一个自定义操作,将文件复制到卸载时的临时文件夹(升级时,新 MSI 会调用以前版本的 MSI 的卸载),然后只需检查并在安装新 MSI 时清除此文件夹(升级部分)。如果您只是卸载(而不是升级),这种方法确实会留下很多文件,但因为我只对配置文件感兴趣 - 这实际上效果很好,如果客户返回我不会丢失所有配置。

这当然不能解决您的直接问题,因为它只会在备份卸载相关文件的版本分发后才能开始工作 - 但在过去 3 年里它对我来说效果很好。

高温高压

于 2013-02-20T09:02:18.200 回答