如何在 32 位批处理脚本中 运行 Windows 实用程序(例如 msiexec)的 64 位版本?

How can I run the 64-bit version of a Windows utility (such as msiexec) in a 32-bit batch script?

我有一个批处理文件(出于兼容性原因)在 32 位 cmd.exe 进程中运行。但是,我现在需要启动 64 位版本的 Windows 命令行工具,在本例中为 msiexec。我该怎么做?

其他详细信息:

我正在使用批处理文件来安装各种软件产品。为了最大程度地兼容旧产品,批处理文件 运行 作为 32 位进程。但是,我现在需要安装 Intel Haxm,这需要 msiexec.

的 64 位版本

我已经尝试调用 c:\windows\system32\msiexec.exe,但是在执行此操作时 Windows 安装程序日志文件仍然显示:

=== Verbose logging started: 14.04.2015 14:27:53 Build type: SHIP UNICODE 5.00.9600.00 Calling process: c:\windows\SysWOW64\msiexec.exe ===

您可以使用 sysnative 别名执行此操作,如 MSDN 文章 File System Redirector:

中所述

32-bit applications can access the native system directory by substituting %windir%\Sysnative for %windir%\System32. WOW64 recognizes Sysnative as a special alias used to indicate that the file system should not redirect the access. This mechanism is flexible and easy to use, therefore, it is the recommended mechanism to bypass file system redirection. Note that 64-bit applications cannot use the Sysnative alias as it is a virtual directory not a real one.

Windows Server 2003 and Windows XP: The Sysnative alias was added starting with Windows Vista.

因此,在批处理文件中,您可以这样说

%windir%\sysnative\msiexec /install product.msi /passive /norestart

或者如果您需要 运行 另一个批处理文件

%windir%\sysnative\cmd.exe /c silent_install.bat

请注意,Windows XP 或 Windows 2003 的 64 位版本不支持 sysnative,除非已安装修补程序 942589。 See this answer for one workaround.