Man*_*O_O 1 windows git bash mingw wow64
我正在尝试从从minggw启动的shell脚本文件创建EXE文件(用于git bash)
我的问题是当我运行以下命令时:
C:/Windows/system32/iexpress.exe //N C:\\git\\install_64bitWindows.SED
C:/Windows/SysWOW64/iexpress.exe //N C:\\git\\Install_32bitWindows.SED
Run Code Online (Sandbox Code Playgroud)
他们总是最终在SysWOW64(创建32位.exe)中调用makecab。是否仍然需要我从system32启动新的cmd,以便我能够创建64位.exe?
因为您正在从32位可执行文件运行命令,所以OS与旧(64位以前的)可执行文件出于兼容性原因会自动为您将System32重定向到SysWOW64(这样,它们将从正确的路径加载其依赖项。 )。
要绕过重定向,您可以从运行运行可执行文件%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位OS环境兼容。
要检测您使用的是32位还是64位操作系统,请检查(名称错误)环境变量PROCESSOR_ARCHITECTURE。x86对于32位,它将是“ ”,AMD64对于64位OS ,将是“ ” 。
放在一起:
对于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
)
Run Code Online (Sandbox Code Playgroud)
对于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
Run Code Online (Sandbox Code Playgroud)
(请注意,在bash中,即使在Windows上,变量名也区分大小写)。