如何运行特定的cmd.exe以获得所需的结果?

如何运行特定的cmd.exe以获得所需的结果?,cmd,windows-10,Cmd,Windows 10,Windows 10: 我想从指挥部得到结果 REG QUERY HKLM\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\UNINSTALL 当我从C:\Windows\System32\cmd.exe启动cmd时,它显示安装了Notepad++并且是所需的输出 C:\Windows\Sysnative\cmd.exe /k "REG QUERY HKLM\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\UNI

Windows 10:

我想从指挥部得到结果

REG QUERY HKLM\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\UNINSTALL
当我从C:\Windows\System32\cmd.exe启动cmd时,它显示安装了Notepad++并且是所需的输出

C:\Windows\Sysnative\cmd.exe /k "REG QUERY HKLM\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\UNINSTALL"
当我从C:\Windows\SysWOW64\cmd.exe启动cmd时,它不会显示Notepad++

我正在从另一个自定义应用程序运行cmd,它给我的结果就像从sysWOW64运行一样

如何启动C:\Windows\SysWOW64\cmd.exe,并让它在运行我的Reg查询时启动C:\Windows\System32\cmd.exe并生成所需的结果?尝试使用此方法来模拟我的其他应用程序

我尝试了“启动C:\Windows\System32\cmd.exe/e:off/v:off/d/k”,得到了不想要的结果


非常感谢您在获取所需输出以及理解cmd程序之间存在差异的原因方面提供的任何帮助。

我建议您先阅读Microsoft文档:

批处理文件查明是在32位还是64位Windows上执行。此外,它还了解在64位Windows上执行时是否在32位执行环境中执行,以访问这两个卸载注册表项

@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "Windows64Bit="
set "WindowsBits=32"
rem Is the environment variable ProgramFiles(x86) defined?
rem That variable is defined by default only on 64-bit Windows?
if not "%ProgramFiles(x86)%" == "" set "Windows64Bit=1" & set "WindowsBits=64"

rem Define tool for the registry queries which is on 32-bit Windows the
rem 32-bit reg.exe in system directory of Windows and on 64-bit Windows
rem the 64-bit reg.exe in system directory of Windows.
set "RegTool=%SystemRoot%\System32\reg.exe"
rem Is the batch file executed by 32-bit cmd.exe in %SystemRoot%\SysWOW64
rem on 64-bit Windows, then change the path to use also in this case the
rem 64-bit reg.exe in Windows system directory.
if defined Windows64Bit if exist %SystemRoot%\Sysnative\reg.exe set "RegTool=%SystemRoot%\Sysnative\reg.exe"

echo Query %WindowsBits%-bit uninstall key of local machine.
%RegTool% QUERY HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall
echo/
pause
echo/
echo Query %WindowsBits%-bit uninstall key of current user.
%RegTool% QUERY HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall 2>nul
echo/
pause
if defined Windows64Bit (
    echo/
    echo Query 32-bit uninstall key of local machine.
    %RegTool% QUERY HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
    echo/
    pause
    echo/
    echo Query 32-bit uninstall key of current user.
    %RegTool% QUERY HKCU\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall 2>nul
    echo/
    pause
)

endlocal

没有关于输出Notepad++的所有卸载注册表项的原因的书面说明。

以下内容将从32位cmd.exe或其他32位应用程序启动64位cmd.exe。这将产生所需的输出

C:\Windows\Sysnative\cmd.exe /k "REG QUERY HKLM\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\UNINSTALL"
此链接将更详细地解释。

从您的问题中可以清楚地看出,您的自定义应用程序是32位的,您需要的信息来自64位注册表

我不认为您需要做任何特殊的事情来检索所需的信息,因为您正在使用的命令中已经提供了该选项

如果打开命令提示窗口,键入reg query/?并读取输出,则应看到以下信息:

因此,要查看是否安装了64位版本的记事本+,下面应该让您知道该密钥是否存在,即使是在32位环境中

Reg Query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall/F NotePad++/K/Reg:64 而且,如果您想查看它的安装位置,那么您可以将其进一步扩展到:

Reg Query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall/S/F NotePad++/K/V InstallLocation/Reg:64
下面是目录的说明。自定义应用程序可能是一个32位应用程序,因此它将从SysWOW64目录运行cmd.exe。我想问题是,如何从C:\Windows\SysWOW64\cmd.exe[32位程序]启动C:\Windows\System32\cmd.exe[64位程序]?也许这会有所帮助。或者,它可能会开始您的搜索。