我们有一个通过 SCCM 部署的应用程序。部署几乎总是成功,并且该应用程序将安装在目标计算机上。但是,SCCM 控制台通常最初显示部署失败,并显示以下错误消息:

安装完成后未检测到该应用程序。

稍后,SCCM 最终将检测到安装并显示安装成功,但该计算机将被列在“已兼容”集下。

这很奇怪:错误消息表明问题出在检测上,而不是安装程序返回错误的结果代码。但“已符合要求”列表也表明检测确实有效,至少最终有效。

对我来说,这表明存在某种时间问题:要么是检测的某些东西实际上尚未准备好,要么是脚本在没有等待安装程序实际完成的情况下继续运行。


部署的检测方法分为两部分:

  1. 一个注册表项,这样我们就可以确保应用程序是最新版本(通常我们会为已安装的同一应用程序部署更新)。
  2. 一个文件,因为某种原因卸载程序不会删除注册表项。

我们并不总是使用文件检测,但应用程序的最新版本每年都会更改产品名称、exe 和 guid(例如,“MyApp2023”在今年的第一个版本中变成了“MyApp2024”,并附带相关文件、注册表、产品 guid 和安装程序更新)。所以现在我们还想删除以前的版本,添加文件检测可以让 SCCM 正确跟踪删除何时完成,因为卸载程序实际上会删除该文件。

我注意到自从添加文件检测以来问题变得更加严重,但我们在没有检测文件的情况下也看到了这个问题。


安装方法使用一个简短的 .bat 脚本以静默模式运行应用程序的安装程序并为嵌入式 msi 选择正确的设置文件:

%~dp0MyInstaller.exe /s /v"/qn SETUPFILE=\"%~dp0MyAppSettings.dat\" "

该脚本还手动设置了单独的注册表项,但以上是重要的步骤。


考虑到这是一个时间问题,我尝试通过在安装脚本末尾添加延迟以及在循环中对文件进行手动测试来解决该问题:

Set TargetFile="C:\Path\To\MyApp.exe"

rem ... rest of install script

:WaitForFiles
If Exist %TargetFile% GoTo Finish
TIMEOUT /T 60 >nul
GOTO WaitForFiles

:Finish

但这似乎没有帮助;我看不到行为有任何变化。


这个应用程序已经这样坏了很长时间了,我们忍受了。但这很烦人,而且在应用程序更新时确实让事情变得更加困难(每年 2 到 4 次更新)。

这里可能发生了什么?我该如何做才能让 SCCM 第一次就准确报告成功/失败?

最后一点是,这个应用确实会安装到Program Files (x86)文件夹中。所以,也许检测中存在一些奇怪的文件夹重定向问题,而“已合规”检查的处理方式不同?

1

  • 您是否尝试过在安装后运行 WMI 方法来触发软件清单?不确定这是否是缺失的环节,但尝试一下也无妨。


    – 

0