我试图从一个shell脚本文件创buildEXE文件我从minggw启动(从git bash使用)
我的问题是当我运行这些命令:
C:/Windows/system32/iexpress.exe //NC:\\git\\install_64bitWindows.SED C:/Windows/SysWOW64/iexpress.exe //NC:\\git\\Install_32bitWindows.SED
他们总是最终调用SysWOW64中的makecab(创build一个32位.exe)是否有无论如何,我从system32启动一个新的cmd为我能够使我的64位.exe?
因为您正在运行32位可执行文件中的命令,所以操作系统会自动将System32重定向到SysWOW64,原因是与旧(早于64位)可执行文件兼容(这样,它们将从正确的路径加载它们的依赖项)。
要绕过重定向,可以从%windir%\sysnative\
运行可执行文件,该文件将自动重定向到“真实”System32:
%windir%\sysnative\iexpress.exe //NC:\\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 //NC:\\git\\install_32bitWindows.SED
因为这将与32位和64位操作系统环境兼容。
要检测您是否在32位或64位操作系统上,请检查(具有误导性的名称)环境变量PROCESSOR_ARCHITECTURE
。 对于32位,将是“ x86
”,对于64位OS将是“ AMD64
”。
把它放在一起:
对于Windows CMD脚本:
if "%PROCESSOR_ARCHITECTURE%"=="x86" ( %windir%\system32\iexpress.exe //NC:\git\install_32bitWindows.SED ) else ( %windir%\sysnative\iexpress.exe //NC:\git\install_64bitWindows.SED )
对于一个bash
脚本:
if [ "$PROCESSOR_ARCHITECTURE" = "x86" ]; then $WINDIR/system32/iexpress.exe //NC:\\git\\install_32bitWindows.SED else $WINDIR/sysnative/iexpress.exe //NC:\\git\\install_64bitWindows.SED fi
(请注意,在bash中,即使在Windows中,变量名也是区分大小写的)。
如果你调用它:
C:/Windows/sysnative/iexpress.exe //NC:\\git\\install_64bitWindows.SED
它应该建立使用64位版本的iexpress。