批处理文件REG QUERY命令在32位注册表而不是64位中搜索

Ama*_*nth 4 registry inno-setup batch-file 32bit-64bit

在我的批处理文件中,我正在执行一个简单的命令来获取VirtualBox安装路径.

REG QUERY HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\VirtualBox /v InstallDir
Run Code Online (Sandbox Code Playgroud)

当我从命令行执行批处理文件时,它会产生奇迹,但如果我从Inno Setup启动相同的批处理文件,则不会给出任何值.

经过一段时间的测试,我发现它只是在从Inno Setup启动批处理文件时才在注册表的32位部分进行搜索.

为了测试这个理论,我查看了位于那里的32位注册表:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\NuGet\Repository
Run Code Online (Sandbox Code Playgroud)

在我的批处理文件中,我输入以下命令(注意我没有指定Wow6432Node,这应该是错误的)

REG QUERY HKEY_LOCAL_MACHINE\SOFTWARE\NuGet\Repository\
Run Code Online (Sandbox Code Playgroud)

实际上,从命令行运行批处理文件时,它找不到注册表项.但是,当从Inno Setup启动相同的批处理文件时,它会发现\ NuGet\repository就好了.

现在的问题是.如何使用我的批处理文件获取64位注册表项(Virtual Box),以便它可以在命令行和Inno Setup中运行?

Ama*_*nth 5

这是我最终做的事情,因为我没有时间穿上它.它适用于所有情况,除非Virtual Box 64位安装在非默认文件夹中并且批处理文件在32位环境中调用.

set vb_path=""

for /f "tokens=1-2*" %%A in ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\VirtualBox" /v InstallDir') do (
  set vb_path="%%C\VBoxManage.exe"
)

IF %vb_path%=="" (
  REM Virtual Box not found. Search in 32 bit virtual box from 64 bit cmd
  for /f "tokens=1-2*" %%A in ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Oracle\VirtualBox" /v InstallDir') do (
    set vb_path="%%C\VBoxManage.exe"
  )
)

IF %vb_path%=="" (
  REM Still not found. Must be 32 bit env. with 64 bit Virtual Box
  REM Search in default installation folders.
  IF EXIST "%ProgramFiles(x86)%\Oracle\VirtualBox\VBoxManage.exe" (
    set vb_path="%ProgramFiles(x86)%\Oracle\VirtualBox\VBoxManage.exe"
  ) ELSE (
    IF EXIST "%ProgramW6432%\Oracle\VirtualBox\VBoxManage.exe" (
      set vb_path="%ProgramW6432%\Oracle\VirtualBox\VBoxManage.exe"
    )
  )
)

IF %vb_path%=="" (
  ECHO VirtualBox folder not found in registry or default installation path!
  EXIT /b 1
)
Run Code Online (Sandbox Code Playgroud)


小智 5

你可以调用类似的东西

REG QUERY HKLM\SOFTWARE /reg:32
Run Code Online (Sandbox Code Playgroud)

或者

REG QUERY HKLM\SOFTWARE /reg:64
Run Code Online (Sandbox Code Playgroud)

明确针对 32 位或 64 位注册表。

调用时没有提到这一点REG /?,但我在这里找到了它:https : //support.microsoft.com/en-us/help/948698/you-cannot-use-the-reg-exe-utility-to-access-64 -bit-registry-keys-on-a
我在 Windows 7 Pro 64 位上使用它。