我刚刚接手了一个复杂的Visual Studio / WiX项目(我从未使用过WiX),突然升级不再包含所有文件。我们不会对每个.dll进行版本控制,因此我们需要将每次升级作为主要升级。 (我知道这通常不是一个好主意,但这适用于只能通过USB驱动器上的脚本升级的设备)。我已阅读this文章并进行了以下更改:
<MajorUpgrade Schedule="afterInstallFinalize" DowngradeErrorMessage="A newer version of [ProductName] is already installed."/>
添加到Product.wxs文件中(我还尝试过Schedule = afterInstallExecute),但没有运气。我将以下代码块添加到Product.wxs文件中(请注意,我必须将&lt;和&gt;字符替换为|才能显示此代码:
<Upgrade Id='291EF866-D9B7-4103-B006-F11E50EEDC7B'> <UpgradeVersion
OnlyDetect='no' Property='PREVIOUSFOUND' Minimum='1.0.0'
IncludeMinimum='yes' Maximum='99.0.0' IncludeMaximum='no' />
</Upgrade>
因此,当我开始这个过程时,一些.dll正在更新,而其他人则没有。现在大多数更新,但不是全部。以下是其中一个未更新的文件的日志示例行:
MSI (s) (34:AC) [16:56:06:306]: Component: cmp9EE90E3731EB7F54B1D4B6D421BF1286; Installed: Absent; Request: Local; Action: Local
这是引用该文件的第二行:
MSI (s) (34:98) [16:56:08:583]: Component: cmp9EE90E3731EB7F54B1D4B6D421BF1286; Installed: Local; Request: Absent; Action: Null
这就是一切。请帮忙!!
答案 0 :(得分:0)
您需要在MajorUpgrade中将Schedule更改为afterInstallInitialize 元件。
Schedule="afterInstallInitialize"
删除升级元素。
您可以查看this tutorial中的具体内容。
我建议您阅读Here中的“计划”属性。
答案 1 :(得分:0)
我终于得到了一个名为REINSTALLMODE的模糊属性,并将其设置为amus。感谢Hannes this发帖!!
以下是解决方案:
<Property Id="REINSTALLMODE" Value="amus" />
<Upgrade Id='291EF866-D9B7-4103-B006-F11E50EEDC7B'>
<UpgradeVersion OnlyDetect='no' Property='PREVIOUSFOUND'
Minimum='1.0.0' IncludeMinimum='yes'
Maximum='99.0.0' IncludeMaximum='no' />
</Upgrade>