SCCM MSI 部署失败,错误代码为 0x87D00324

SCCM MSI 部署失败,错误代码为 0x87D00324

我有一个由 WIX 创建的 MSI,可以以管理员身份在本地运行而不会出现错误。但是,当通过 SCCM 部署为从 MSI 导入的应用程序部署时,软件中心显示失败,代码为0x87D00324。无论哪种情况,实际安装都会成功(因为文件和注册表项按预期创建并且应用程序加载)。

SCCM 错误表明安装后未检测到产品。如果使用与 SCCM 配置相同的命令行手动安装(msiexec /i [msi goes here] /qn),软件中心会显示该应用程序已安装,表明检测规则正确 - 检测设置为查找已安装的产品代码。AppEnforce.log跟踪表明上述情况正在发生:

  • SCCM 安装 MSI 时没有出现任何错误
  • 安装后尝试检测 MSI
  • 检测失败,将部署标记为失败

MSI 配置为为所有用户安装(ALLUSERS=1作为 MSI 属性,而不是在命令行上),并且需要提升才能运行。SCCM 作业配置为“为系统安装”和“仅在没有用户登录时”,并且针对特定机器而不是用户。

启用计算机范围的 MSI 日志记录后,我猜测日志记录输出中可能会出现一些差异:

  • SCCM 发布的安装有一个日志条目:PROPERTY CHANGE: Deleting ALLUSERS property. Its current value is '1'虽然不清楚是什么原因造成的
    • 即使将 ALLUSERS=1 作为命令行参数提供,也会发生这种情况msiexec- 例如“添加 ALLUSERS...”,然后几行之后是“删除 ALLUSERS...”
  • 通过 SCCM 安装时,步骤ProductPublish/日志条目的值为Assignment0(根据文档,相当于每个用户),但手动安装时(相当于每台机器)的值为 1
  • SCCM 安装会导致创建三个 MSI 日志,而不是像手动情况那样只创建单个日志
    • ADVERTISE一个显示正在使用操作调用的 MSI
    • 一个似乎根本没有调用msiexec但可能由于某种原因将其余ADVERTISE操作记录到另一个文件中
    • 使用空白操作调用的 MSI(在日志中显示为 的操作INSTALL

安装后,Get-WmiObject -Namespace root\ccm\CIModels -Class CCM_MSIProduct两种安装方法有不同的输出:

  • 通过 SCCM 安装,没有新应用程序的条目 - 我猜这就是 SCCM 认为该应用程序未安装的原因
  • 手动安装后,新应用程序会显示正确的详细信息

两种方法在通过 查询时均显示应用程序已安装wmic product get

客户:Windows 10 企业版,SCCM 客户端 5.0.0.8577.1115

服务器:SCCM 1710 (5.0.0.8577.1115)

2018 年 4 月 12 日更新,其他信息:

  • SCCM 工作适用于一些机器,但它们之间没有明显的共同点
  • 通过以 SYSTEM 身份运行 MSI,可以在给定的机器上永久修复 SCCM 作业pstools- 如果执行一次,手动卸载 MSI,然后通过 SCCM 重新安装即可工作并正确检测(这显然毫无意义,但却是一个有趣的结果)
  • 故障机器上的日志记录表明操作是在用户上下文中完成的,而不是在每台机器的上下文中完成的
    • Using cached product context: User assigned for product: 6176BC215761514458869E9B9ABB08BC
  • 登录故障机器时,会显示多行上述内容,而登录正常运行的机器时,似乎会在机器上下文中命中多个产品代码
  • 一旦通过 SCCM 在失败状态下安装,唯一明显的注册表差异就是HKLM\Software\Classes\Installer\Products\[[Product Code]]\AdvertiseFlags,它0x180处于失败状态,而0x184处于通过状态
  • 我们的运营团队认为故障是在作业启用取代功能时开始的,但我无法确认所有故障是否都是如此

什么可能导致 SCCM 作业和手动安装之间的行为差​​异?什么可能导致 SCCM 作业在用户上下文中运行,即使它似乎以 SYSTEM 身份运行并配置为“为系统安装”?

答案1

正如您所提到的,它尝试宣传 MSI 而不是安装,这很奇怪。也许您必须重新查看脚本或在 orca 中阅读它并查看。

您是否碰巧检查了检测中定义的产品代码是否也出现在注册表中。

32 位:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Product code

或者

64 位:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Product code

相关内容