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.
调试:重大升级调试失败: .
原因?您很可能有:
- 错误编写的升级 table。
- 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
.
链接:
不同installation contexts。 Enum MsiInstallContext
:
Const msiInstallContextAllUserManaged = 8
Const msiInstallContextFirstVisible = 0
Const msiInstallContextMachine = 4
Const msiInstallContextUser = 2
Const msiInstallContextUserManaged = 1
-
客户端机器都是 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.
调试:重大升级调试失败:
原因?您很可能有:
- 错误编写的升级 table。
- 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
.
链接:
不同installation contexts。
Enum MsiInstallContext
:Const msiInstallContextAllUserManaged = 8
Const msiInstallContextFirstVisible = 0
Const msiInstallContextMachine = 4
Const msiInstallContextUser = 2
Const msiInstallContextUserManaged = 1