【发布时间】:2017-12-27 04:27:53
【问题描述】:
我想知道是否有任何方法可以使用更新版本的产品覆盖旧文件。有几百个文件,那么有没有更好的方法来做到这一点?由于升级完全清除了所有文件。我希望升级 MSI 覆盖文件。
我的升级逻辑如下:
<Upgrade Id="$(var.UpgradeCode)">
<UpgradeVersion Minimum="$(var.ProductVersion)"
IncludeMinimum="no"
OnlyDetect="yes"
Property="NEWPRODUCTFOUND" />
<UpgradeVersion Minimum="$(var.RTMProductVersion)"
IncludeMinimum="yes"
Maximum="$(var.ProductVersion)"
IncludeMaximum="no"
Property="UPGRADEFOUND" />
</Upgrade>
<CustomAction Id="PreventDowngrading" Error="Newer version already installed" />
<InstallUISequence>
<Custom Action="PreventDowngrading" After="FindRelatedProducts">NEWPRODUCTFOUND</Custom>
</InstallUISequence>
<InstallExecuteSequence>
<Custom Action="PreventDowngrading" After="FindRelatedProducts">NEWPRODUCTFOUND</Custom>
<RemoveExistingProducts After="InstallFinalize" />
<InstallExecute After="RemoveExistingProducts" />
</InstallExecuteSequence>
【问题讨论】:
-
重大升级会做到这一点,但您没有提供足够的信息,也没有描述正在发生的事情。升级需要相同的 UpgradeCode、新的 ProductCode 和 PackageCode、前 3 个字段中递增的 ProductVersion,以及您希望更新的文件版本递增。
-
升级完全卸载了所有文件,只安装了少数文件。我有相同的 UpgradeCode,对于我使用的产品代码 *,包代码
<Package InstallerVersion="405" Compressed="yes" InstallPrivileges="elevated" InstallScope="perMachine"/>。我还将产品版本从 1.0.0 增加到 1.0.1。 -
只是为了说明这一点,您正在进行的升级不是“补丁”,它需要是一个完整的产品安装,它将为新用户安装全新的。它必须包含所有文件。如果你想要一个只更新一些文件的包,那么构建一个补丁包,一个 .msp 文件。
-
所以我创建了基于两个版本的补丁文件。第二个有很多更新的文件。现在,当我运行 pyro 命令时,我得到一个关于没有不同转换文件的异常。这可能吗?补丁文件是根据文件的时间戳或文件的文件大小创建的,还是仅在新版本中添加新文件时创建?
-
这是错误消息.. 错误 PYRO0227 : 正在构建的转换不包含任何差异,因此无法创建
标签: wix windows-installer upgrade