SCCM 不更新手动安装的软件

SCCM does not update software that was installed manually

客户端机器都是 Windows 10 Pro(64 位)。

如果我们要通过 SCCM 安装 MyCompanyApp.msi,我们发现我们可以使用 SCCM 成功更新它。那里一切正常。

但是,如果我要 运行 MyCompanyApp.msi 通过双击 msi 或 运行ning 在本地]msiexec,用 SCCM 更新它失败。此外,SCCM 会继续并 运行 进行安装,就好像它从未检测到以前的安装一样。当您检查控制面板时,您会看到该产品列出了两次;每个都有不同的版本号。

最重要的是,当我将手册 installation/upgrade 与 SCCM 手册 installation/upgrade 混合使用时,我遇到了上述问题。下面的 table 应该总结一下。

Logging: Do you have a proper log file? If not, please create it:

msiexec.exe /i C:\Path\Your.msi /L*v C:\Your.log

Starting Point: I would seach for FindRelatedProducts and check what the log file reads in the sections found.


调试:重大升级调试失败:.


原因?您很可能有:

  1. 错误编写的升级 table。
  2. per-machine 和 per-user 安装的混合体。

1.升级Table

检查 Upgrade table 中的条目。它看起来像这样吗?有很多方法可以搞砸 table。最常见的问题是指定的版本范围。如果设置不正确,找到的版本可能超出标识为“有效删除”的范围:


2。安装上下文MSI does not support "cross context" updates as explained here by Rob Mensching - the creator of WiX. My follow-up comment to him there is a more or less crazy approach I used once to remove some straggling installs in the wrong context: Crazy approach。相反:检查 SCCM 这些天有哪些功能可以删除 per-user 安装?

Per-User 安装Here is a piece on why per-user installs - as implemented by MSI - are not recommended - 在我看来(以及许多其他 MSI 用户)。

您可以在有问题的机器上找到 per-user 安装 - 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.

链接: