我一直在使用一个特定的 .msi ( AppleApplicationSupport.msi
)。我用两种不同的方式安装了它,我认为它们是等效的。然而,结果不同,如下所示。
PSEXEC -i -s 命令
使用命令提示符进行安装psexec -i -s cmd
并运行msiexec /i AppleApplicationSupport.msi
得到我想要的结果:
- “添加或删除程序”中显示“Apple 应用程序支持(32 位)”
- “Apple Application Support (32-bit)”可以卸载
SCCM 客户端安装的 MSI 部署类型
创建 MSI 部署类型并使用 SCCM 客户端安装它将产生以下结果:
- “添加或删除程序”中未显示任何内容
- SCCM 未检测到已安装
- 使用 可以找到“Apple 应用程序支持(32 位)”应用程序
gwmi -Class Win32_Product
,但是运行$app.Uninstall()
并不会卸载它。
有什么不同?
我以为为系统安装的 MSI 部署类型相当于msiexec
从命令行运行psexec -i -s cmd
。显然,它们是不一样的。
当 SCCM 客户端为系统安装 MSI 技术部署类型时,它究竟在做什么?我可以在没有 SCCM 参与的情况下复制该操作吗?
SCCM 客户端是否执行脚本安装程序部署类型的安装程序真的相当于
msiexec
从调用psexec -i -s cmd
?换句话说,对于脚本安装程序部署类型,我是否应该期望msiexec
SCCM 客户端运行和msiexec
从 运行之间具有奇偶校验psexec -i -s cmd
?
在kce的回答后添加:
- SCCM 如何安装 .msi 而不使其出现在“添加或删除程序”中?
答案1
- 当 SCCM 客户端为系统安装 MSI 技术部署类型时,它究竟在做什么?我可以在没有 SCCM 参与的情况下复制该操作吗?
据我所知,SCCM 客户端正在运行部署类型中指定的任何安装字符串,然而它在 NT AUTHORITY\SYSTEM 上下文中执行。您可以通过从 BUILTIN\Administrators 成员的帐户执行相同的安装字符串来近似(但不能重复)安装。MSIEXEC
可以作为 32 位或 64 位进程运行,具体取决于您是否选中“在 64 位客户端上以 32 位进程运行安装和卸载程序”复选框。
- SCCM 客户端执行脚本安装程序部署类型的安装程序是否真的等同于从 psexec -i -s cmd 调用 msiexec?换句话说,对于脚本安装程序部署类型,我是否应该期望 SCCM 客户端运行的 msiexec 与从 psexec -i -s cmd 运行的 msiexec 之间具有奇偶校验?
嗯。好问题。客户端应该只运行安装字符串,但如果它做了一些更深层次、更黑暗的魔法,我也不会感到惊讶。我能想到的唯一可能导致差异的事情就是您在其下运行安装程序的进程的位数。我认为 SCCM 客户端几乎总是使用 64 位,但 cmd.exe 是 32 位,对吗?
看看我的在这里回答获得有关处理软件安装问题的其他一般建议。
祝你好运。
答案2
除了 @kce 的这个精彩回答之外,我唯一要补充的微不足道、过于简单的事情是
- 我平等对待所有包裹
一般情况下,除非被迫处理“应用程序”,否则我会避免使用它们,这种情况通常是在我创建 App-V 部署时。否则,我会坚持使用软件包,正如您所见或将要看到的那样,它们不会那么令人头疼。
在 SCCM 中,我为 .msi 文件创建了一个包,就像我为任何其他安装程序创建包一样。就像 kce 说的那样,它是在系统帐户下安装的,但是当我创建一个包时,与使用它的默认 msi 处理程序相比,我可以更好地控制它运行的安装字符串,例如msiexec /i "my.msi" /qb /v
与默认值相比。我的应用程序基本上总是出现在“添加/删除”中,如果我手动安装它们就会出现在那里。从理论上讲,是的,.msi 的 SCCM 应用程序部署类型应该可以很好地工作,但在实践中使用其他东西可能会给你带来更好的结果。由于应用程序是此版本 SCCM 的新功能,因此可能需要解决一些问题。
奖金
如果您确实想知道这是否与安装帐户有关,请使用 psexec 开关在系统帐户下运行该命令。