1

我正在编写一个批处理脚本来更新软件包(卸载旧版本/安装新版本)。这需要通过网络完成,因为有 500 台 PC 需要更新。卸载前的第一步是检查是否安装了软件。为了检查我是否查询了注册表:

reg query "HKLM\SOFTWARE\A.E.T Europe B.V."

此查询在本地运行时(出于测试目的)给出了正确的结果,但是当我远程运行它时(它们将运行它)返回错误的结果。

reg query "\\I301\HKLM\SOFTWARE\A.E.T Europe B.V."

如果我在本地运行该行,则返回 0。但是,如果我登录到 I301 并在本地运行查询返回 1,这就是 AET Europe BV 显示在 Windows 注册表的 Wow6432Node 分支下的事实。

这是为什么???

提前致谢!

4

3 回答 3

3

如果在 64 位 Windows 上只有关键

HKLM\SOFTWARE\Wow6432Node\A.E.T Europe B.V.

但没有钥匙

HKLM\SOFTWARE\A.E.T Europe B.V.

结果不同的原因很可能reg.exe是从批处理文件或命令行执行的版本引起的。

%SystemRoot%\System32\reg.exe如果在处理批处理文件时执行 64 位或%SystemRoot%\System32\cmd.exe在使用该行时以 64 位运行命令,则找不到密钥

reg query "\\I301\HKLM\SOFTWARE\A.E.T Europe B.V."

但是,如果在处理批处理文件时执行 32 位或在使用该行时%SystemRoot%\SysWOW64\reg.exe通过 32 位运行命令,则会找到密钥%SystemRoot%\SysWOW64\cmd.exe

reg query "HKLM\SOFTWARE\A.E.T Europe B.V."

因为对于 32 位应用程序,注册表访问HKLM\SOFTWAREHKLM\SOFTWARE\Wow6432Node由注册表重定向器重定向到的。

检查两个可能的关键位置:

@echo off
%SystemRoot%\System32\ping.exe -n 1 I301 >nul
if errorlevel 1 (
    echo Computer with name I301 is not available in network.
    goto :EOF
)

%SystemRoot%\System32\reg.exe query "\\I301\HKLM\SOFTWARE\A.E.T Europe B.V." >nul 2>&1
if not errorlevel 1 goto Installed
%SystemRoot%\System32\reg.exe query "\\I301\HKLM\SOFTWARE\Wow6432Node\A.E.T Europe B.V." >nul 2>&1
if not errorlevel 1 goto Installed

echo A.E.T Europe B.V. is not installed.
goto :EOF

:Installed
echo A.E.T Europe B.V. is installed already.

另请参阅 Microsoft 文档页面:

于 2015-12-16T15:51:54.923 回答
1

莫菲的好回答。在 64 位系统上,您还可以考虑使用

/reg:32 & /reg:64 见 REG QUERY /?

如果您从另一个应用程序启动 CMD.exe,有​​时会遇到麻烦。如果该应用程序是 32 位应用程序,它将启动 32 位版本的 CMD.exe

于 2015-12-16T18:26:03.020 回答
0

感谢 Mofi 和 RGuggisberg,

当天晚些时候发现了 Mofi 所说的一切(以及 RGuggisberg 的补充)。由于我无法使其工作,我尝试检查注册表中的 Uninstall 条目,认为它会在那里并且只在那里。在再次获得类似结果后,我进行了更多谷歌搜索,发现 Windows 在注册表中有两棵树:一棵用于 32 位应用程序,另一棵用于 64 位应用程序。提示是由以下人员给出的:

最后它显示了 RGuggisber 提到的 /reg:32 和 /reg:64 的两个选项。查找它们并发现两个注册表的存在。

使用 /reg:64 尝试了相同的查询(对于已卸载),并找到了我正在寻找的密钥。尝试使用 /reg:32 确实找不到它。我运行脚本的机器运行 Windows 7 32 位。远程机器 Windows 8.1 64 位。

于 2015-12-17T06:44:35.697 回答