从MINGW启动时运行System32程序而不是SysWOW64

时间:2013-09-24 13:17:09

标签: windows git bash mingw wow64

我试图从shell脚本文件创建EXE文件我是从minggw启动的(从git bash中使用)

我的问题是当我运行这些命令时:

C:/Windows/system32/iexpress.exe //N C:\\git\\install_64bitWindows.SED
C:/Windows/SysWOW64/iexpress.exe //N C:\\git\\Install_32bitWindows.SED

他们总是最终调用SysWOW64中的makecab(创建一个32位.exe) 反正我是否可以从system32启动一个新cmd,以便能够生成我的64位.exe?

2 个答案:

答案 0 :(得分:4)

因为您正在从32位可执行文件运行该命令,所以操作系统会自动将System32重定向到SysWOW64,出于与旧(64位前)可执行文件的兼容性原因(这样,它们将加载它们的依赖关系)正确的道路)。

要绕过重定向,您可以从%windir%\sysnative\运行可执行文件,它将自动重定向到“真正的”System32:

%windir%\sysnative\iexpress.exe //N C:\\git\\install_64bitWindows.SED

有关完整说明,请参阅:http://www.tipandtrick.net/how-to-suppress-and-bypass-system32-file-system-redirect-to-syswow64-folder-with-sysnative/

如果您还想运行32位可执行文件,请使用

%windir%\system32\iexpress.exe //N C:\\git\\install_32bitWindows.SED

因为这将兼容32位和64位操作系统环境。

要检测您是否在32位或64位OS上,请检查(误导性命名)环境变量PROCESSOR_ARCHITECTURE。对于32位,它将是“x86”,对于64位操作系统,它将是“AMD64”。

全部放在一起:

对于Windows CMD脚本:

if "%PROCESSOR_ARCHITECTURE%"=="x86" (
    %windir%\system32\iexpress.exe //N C:\git\install_32bitWindows.SED
) else (
    %windir%\sysnative\iexpress.exe //N C:\git\install_64bitWindows.SED
)

对于bash脚本:

if [ "$PROCESSOR_ARCHITECTURE" = "x86" ]; then
    $WINDIR/system32/iexpress.exe //N C:\\git\\install_32bitWindows.SED
else
    $WINDIR/sysnative/iexpress.exe //N C:\\git\\install_64bitWindows.SED
fi

(请注意,在bash中,变量名称区分大小写,即使在Windows上也是如此。)

答案 1 :(得分:1)

如果您将其调用为:

C:/Windows/sysnative/iexpress.exe //N C:\\git\\install_64bitWindows.SED

它应该使用iexpress的64位版本构建。