1

我们有一个产品,1.0,在现场。我正在尝试更新该产品的安装程序,以便它可以安装旧版本,以安装新版本 2.0。我正在使用 Visual Studio 2010 安装项目来执行此操作。

我维护了 UpgradeCode,并将删除早期版本设置为 true,新的安装程序将成功安装旧版本,删除旧版本。

但是,旧 MSI 的卸载似乎是在安装新 MSI之后发生的。两个 MSI 都部署了相同的注册表项(因为我们使用它们的代码没有更改)……但这意味着当旧的 MSI 卸载时,它会删除这些注册表项。而且由于卸载是在安装新的 MSI 之后发生的……这些密钥就消失了。

有没有简单的方法来防止这种情况?这似乎是一个非常正常的用例,但我不知道如果旧安装程序删除了这些注册表项,我应该如何维护它们。

编辑:所以,我想出了如何在流程的早期移动 RemoveExistingProduct 步骤。我仔细检查过——是的,在 VS2005 中它是第一个完成的,在 2010 年它几乎是最后一个完成的。我不确定他们希望它如何工作,如果旧的卸载程序删除了新安装程序添加的东西......无论如何,这只是获取 Orca 并编辑步骤的序列号的问题。

4

1 回答 1

3

听起来您可能需要将RemoveExistingProducts操作放在安装程序序列中 - 可能放在 InstallValidate 操作中。

恐怕我不知道如何使用 Visual Studio 完成此任务 - 我使用 Advanced Installer,因为我发现它为构建和管理安装包提供了更简单的界面。

于 2012-05-31T13:01:19.180 回答