在我的批处理文件中,我正在执行一个简单的命令来获取VirtualBox的安装路径。
在我的批处理文件中,我输入了以下命令(请注意,我没有指定Wow6432Node,这是错误的)
REG QUERY HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\VirtualBox /v InstallDir
当我从命令行执行批处理文件时,它的表现非常出色,但是如果我从Inno Setup启动相同的批处理文件,则不会给出任何值。
经过长时间的测试,我发现只有在从Inno Setup启动批处理文件时,它才会仅搜索注册表的32位部分。
为了验证这个理论,我查看了那里的一个32位注册表:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\NuGet\Repository
在我的批处理文件中,我输入了以下命令(请注意,我没有指定Wow6432Node,这是错误的)
REG QUERY HKEY_LOCAL_MACHINE\SOFTWARE\NuGet\Repository\
实际上,当从命令行运行批处理文件时,它无法找到注册表键。但是,当从Inno Setup启动相同的批处理文件时,它可以很好地找到\NuGet\repository。
现在的问题是,如何使用我的批处理文件获取64位注册表键(Virtual Box),以便它可以从命令行和Inno Setup中都能正常工作?
registry redirector
,以及您正在运行64位命令提示符和32位Inno Setup安装程序的事实。从64位命令提示符执行的批处理文件查看了64位注册表节点,而从32位Inno Setup运行时查看了32位注册表节点。要获得您所要求的内容,您需要运行32位命令提示符。 - TLamareg.exe
路径作为执行函数(或脚本条目)的工作目录。但我不确定这是否是最好的方法,因为我不是批处理脚本或命令提示符的粉丝。 - TLamacmd.exe
上运行那个单行批处理文件。你需要以某种方式扩展你的批处理脚本。目前,其中一个会失败。这是因为它们每个都调用不同的reg.exe
,具体取决于它们的位数。就像你执行的64位命令行和32位Inno Setup一样(其中一个失败取决于你查询的节点)。 - TLama