日志记录:您有正确的日志文件吗?如果没有,请创建它:
Enable installation logs for MSI installer without any command line arguments
msiexec.exe /i C:\Path\Your.msi /L*v C:\Your.log
起点:我会搜索FindRelatedProducts
并检查日志文件在找到的部分中读取的内容。
调试:主要升级失败调试: WIX 不卸载旧版本。
原因?您很可能有:
- 错误创作的升级表。
- 每台机器和每用户安装的混合。
1.升级表
检查升级表中的条目。它看起来像这样吗。有很多方法可以把这张桌子弄乱。最常见的问题是指定的版本范围。如果设置不正确,则找到的版本可能超出标识为“有效删除”的范围:
2. 安装上下文: MSI 不支持“跨上下文”更新,正如WiX 的创建者 Rob Mensching 所解释的。我对他的后续评论是,我曾经使用过一种或多或少疯狂的方法来删除错误上下文中的一些散乱安装: Crazy approach。取而代之的是:检查 SCCM 如今有哪些功能可以删除每个用户的安装?
每用户安装:在我看来(以及许多其他 MSI 用户),为什么不推荐每用户安装(由 MSI 实施)的原因如下。
您可以像这样在有问题的机器上找到每个用户的安装 - note that there could very well be NO per user installations
:
Dim i, msi
Set installer = CreateObject("WindowsInstaller.Installer")
i = 1
For Each product In installer.ProductsEx("", "", 7)
productcode = product.ProductCode
name = product.InstallProperty("ProductName")
version=product.InstallProperty("VersionString")
allusers=product.Context
' Ignore all per-machine installations
If(allusers <> 4) Then
msi = msi + CStr(i) + ": " & productcode & ", " & name & ", " & version & ", " & allusers & vbNewLine & vbNewLine
i = i + 1
End If
Next
MsgBox msi
删除 if 部分以获取所有已安装的 MSI 产品。可以显示多少个字符是有限制的MsgBox
。而是写入文件?(请参阅此处的中页)或使用WScript.Echo msi
.
链接: