Wix MajorUpgrade会删除旧版本,但不会安装新版本,除非MSI再次运行
我有两个MSI,它们除了ProductID和版本之外是相同的。我正在测试MajorUpgrade路径 具有更高版本的MSI关闭Windows服务,并删除所有工件,但在安装新二进制文件时失败,并出现1603错误。事实上,它看起来正在执行卸载,包括文件和注册表清理,但随后无法执行安装 如果我再次运行更高版本的MSI,安装工作正常:创建文件和目录,启动Windows服务,以及我设置在安装完成后运行的可执行文件 我在下面生成了一个详细的日志片段,但修复文件未复制到正确位置的问题并不明显 Wix代码:Wix MajorUpgrade会删除旧版本,但不会安装新版本,除非MSI再次运行,wix,windows-installer,Wix,Windows Installer,我有两个MSI,它们除了ProductID和版本之外是相同的。我正在测试MajorUpgrade路径 具有更高版本的MSI关闭Windows服务,并删除所有工件,但在安装新二进制文件时失败,并出现1603错误。事实上,它看起来正在执行卸载,包括文件和注册表清理,但随后无法执行安装 如果我再次运行更高版本的MSI,安装工作正常:创建文件和目录,启动Windows服务,以及我设置在安装完成后运行的可执行文件 我在下面生成了一个详细的日志片段,但修复文件未复制到正确位置的问题并不明显 Wix代码: &
<Product Id="*"
Name="product name"
Language="1033"
Version="1.2.0"
Manufacturer="Company Name"
UpgradeCode="stable-upgrade-guid">
<!-- snip -->
<Property Id="WixShellExecTarget" Value="[#TheProgram.exe]" />
<CustomAction Id="LaunchApplication"
BinaryKey="WixCA"
DllEntry="WixShellExec"
Impersonate="yes" />
<MajorUpgrade DowngradeErrorMessage="A later version of [ProductName] is already installed. Setup will now exit." />
<InstallExecuteSequence>
<Custom Action="CheckForRunningProcesses_CA" After="InstallValidate" />
<Custom Action="LaunchApplication" After="InstallFinalize"/>
</InstallExecuteSequence>
我相信ShellExec返回代码2表示找不到文件。实际上,程序文件目录不存在。
我不确定返回值为3的LaunchApplication意味着什么。我猜没有找到文件。
你知道为什么MajorUpgrade会删除旧版本,但不会安装新版本,但在后续运行中,它会删除吗?问了这个问题后,我很自然地发现了答案。线索是,不知怎么的,我没有看到 为了解决这个问题,你需要移动你的 稍后删除现有产品操作。如果您正在使用MajorUpgrade 元素,然后调度为“afterInstallExecute”或 Schedule='afterInstallFinalize'应该可以做到这一点。你需要 更仔细地使用组件规则 将MajorUpdate的计划更改为afterInstallExecute是解决方案:
<MajorUpgrade
DowngradeErrorMessage="A later version of [ProductName] is already installed. Setup will now exit."
Schedule="afterInstallExecute" />
一点也不明显。这不完全是复制品。类似的症状,完全不同的日志文件。解决方案是一样的,但根本问题是不同的。
<MajorUpgrade
DowngradeErrorMessage="A later version of [ProductName] is already installed. Setup will now exit."
Schedule="afterInstallExecute" />