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

Fra*_*ank 3 windows win64 batch-file msiexec

我有一个批处理文件(出于兼容性原因)在32位cmd.exe进程中运行.但是,在这种情况下,我现在需要启动64位版本的Windows命令行工具msiexec.我怎样才能做到这一点?

其他细节:

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

我已经尝试过调用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 ===

Har*_*ton 6

您可以使用sysnative别名执行此操作,如MSDN文章文件系统重定向器中所述:

32位应用程序可以通过%windir%\ Sysnative替换%windir%\ System32来访问本机系统目录.WOW64将Sysnative识别为一个特殊别名,用于指示文件系统不应重定向访问.这种机制灵活且易于使用,因此,它是推荐的绕过文件系统重定向的机制.请注意,64位应用程序无法使用Sysnative别名,因为它是虚拟目录而不是真实目录.

Windows Server 2003和Windows XP: 从Windows Vista开始添加Sysnative别名.

所以,在批处理文件中,你会说类似的东西

%windir%\sysnative\msiexec /install product.msi /passive /norestart
Run Code Online (Sandbox Code Playgroud)

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

%windir%\sysnative\cmd.exe /c silent_install.bat
Run Code Online (Sandbox Code Playgroud)

请注意,sysnative除非安装了修补程序942589,否则64位版本的Windows XP或Windows 2003不支持. 请参阅此答案以获取一种解决方法.