在工作中,我们使用WiX来构建安装包。我们希望产品X的安装将导致在该计算机上卸载该产品的先前版本。
我在互联网上的几个地方读到了关于一个重大升级的信息,但无法使其正常工作。谁能指定我需要采取的确切步骤,以添加卸载以前的版本功能到WiX?
发布于 2010-08-26 21:57:28
在最新的版本中(从3.5.1315.0测试版开始),您可以使用MajorUpgrade element而不是您自己的。
例如,我们使用此代码进行自动升级。它可以防止降级,给出本地化的错误消息,还可以防止升级已经存在的相同版本(即只升级较低版本):
<MajorUpgrade
AllowDowngrades="no" DowngradeErrorMessage="!(loc.NewerVersionInstalled)"
AllowSameVersionUpgrades="no"
/>
发布于 2009-04-07 04:05:24
以下是我在主要升级中使用的语法:
<Product Id="*" UpgradeCode="PUT-GUID-HERE" Version="$(var.ProductVersion)">
<Upgrade Id="PUT-GUID-HERE">
<UpgradeVersion OnlyDetect="yes" Minimum="$(var.ProductVersion)" Property="NEWERVERSIONDETECTED" IncludeMinimum="no" />
<UpgradeVersion OnlyDetect="no" Maximum="$(var.ProductVersion)" Property="OLDERVERSIONBEINGUPGRADED" IncludeMaximum="no" />
</Upgrade>
<InstallExecuteSequence>
<RemoveExistingProducts After="InstallInitialize" />
</InstallExecuteSequence>
正如@Brian Gillespie指出的那样,还有其他地方可以根据需要的优化来安排RemoveExistingProducts。注意PUT-GUID-HERE必须是相同的。
发布于 2008-10-18 05:56:37
Product元素中的Upgrade元素,再加上对操作的适当调度,将执行您想要的卸载。请务必列出您要删除的所有产品的升级代码。
<Property Id="PREVIOUSVERSIONSINSTALLED" Secure="yes" />
<Upgrade Id="00000000-0000-0000-0000-000000000000">
<UpgradeVersion Minimum="1.0.0.0" Maximum="1.0.5.0" Property="PREVIOUSVERSIONSINSTALLED" IncludeMinimum="yes" IncludeMaximum="no" />
</Upgrade>
请注意,如果您小心构建,就可以防止人们意外地将您的产品的较旧版本安装在较新版本之上。这就是最大值字段的作用。在构建安装程序时,我们将UpgradeVersion Maximum设置为正在构建的版本,但将IncludeMaximum=设置为“no”以防止这种情况。
您可以选择RemoveExistingProducts的日程安排。我更喜欢将它安排在InstallFinalize之后(而不是其他人推荐的InstallInitialize之后):
<InstallExecuteSequence>
<RemoveExistingProducts After="InstallFinalize"></RemoveExistingProducts>
</InstallExecuteSequence>
这会使产品的早期版本一直安装到复制新文件和注册表项之后。这使我可以将数据从旧版本迁移到新版本(例如,您已经将用户首选项的存储从注册表切换到一个XML文件,但是您希望礼貌地迁移他们的设置)。此迁移是在InstallFinalize之前的延迟自定义操作中完成的。
另一个好处是效率:如果有未更改的文件,Windows Installer不会在您安排在InstallFinalize之后再次复制它们。如果在InstallInitialize之后调度,则会先完全删除以前的版本,然后再安装新版本。这会导致不必要的文件删除和重新复制。
有关其他计划选项,请参见MSDN中的RemoveExistingProducts帮助主题。本周,链接是:http://msdn.microsoft.com/en-us/library/aa371197.aspx
https://stackoverflow.com/questions/114165
复制相似问题