通过 SCCM 安装后尝试通过注册表检测失败

通过 SCCM 安装后尝试通过注册表检测失败

这很简单,我推出一个程序,一个 exe 文件。为了让 SCCM 知道该程序已安装,它需要“检测”该程序,因为它是一个 exe 文件,这意味着我需要应用手动检测。在这个例子中,我无法使用任何文件,因为文件上的版本没有区别,我需要能够区分不同的版本。

我尝试通过注册表来做到这一点。以下是我所做的 ->

SCCM 2012,屏幕截图,点击放大

我确认安装后注册表存在,但无论如何它都无法检测到程序。因此,部署基本上可以正常工作,但它看不到这个注册表。

为什么?路径是正确的。我尝试过在“32”位和不使用“32”位的情况下使用标志。

答案1

首先,当我看着那张截图时,有一个大问题引起了我的注意,那就是Wow6432Node注册表项路径中间的文本。

MSDN:注册表中的 32 位和 64 位应用程序数据

在 64 位 Windows 上,注册表项的各部分针对 32 位应用程序和 64 位应用程序分别存储,并使用注册表重定向器和注册表反射映射到单独的逻辑注册表视图,因为应用程序的 64 位版本可能使用与 32 位版本不同的注册表项和值。

...

注册表树中的重定向子节点由 WOW64 组件使用名称 Wow6432Node 自动创建。因此,切勿将您创建的任何注册表项命名为 Wow6432Node。

在运行 64 位 Windows 的计算机上,这Wow6432Node是注册表的一部分,32 位应用程序会被静默重定向到该注册表部分(应用程序不会意识到)。

在 SCCM 的注册表检测中访问此重定向的方法是让 SCCM 以与应用程序相同的方式重定向,方法是勾选“此注册表项与 64 位系统上的 32 位应用程序相关联“您可以在屏幕截图中间附近看到的框,删除\Wow6432Node注册表项路径之外的项。这意味着 SCCM 现在知道此注册表项位于 32 位注册表部分,并且无论您是在 32 位还是 64 位计算机上,它都会在那里查找它。


其次,我不知道您的应用程序,但很可能有更简单的方法来进行此检测。

尽管该应用程序是一个 EXE,但完全有可能(并且非常常见)该 EXE 只是 Windows Installer MSI 的包装器,在这种情况下您可以非常轻松地使用“Windows Installer”产品代码检测方法。

有几种方法可以通过检查已安装应用程序的测试机器来查找 EXE 的 MSI 产品代码。一种方法是使用 WMI 命令行界面列出已安装的应用程序及其安装程序代码,从 DOS 提示符运行:

wmic product get Name, IdentifyingNumber

如果您的应用程序在该列表中显示有“Identifyingnumber”,那么您应该能够将其放入 Windows Installer 检测方法中。

相关内容