繁体   English   中英

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

[英]Running System32 programs instead of SysWOW64 when launching from MINGW

我正在尝试从从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

他们总是最终在SysWOW64(创建一个32位.exe)中调用makecab。是否仍然需要我从system32启动一个新的cmd,以使我能够创建64位.exe?

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

要绕过重定向,可以从%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位OS环境兼容。

要检测您使用的是32位还是64位操作系统,请检查(错误命名)环境变量PROCESSOR_ARCHITECTURE 对于32位,它将是“ x86 ”,对于64位OS,将是“ 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上,变量名也区分大小写)。

如果您将其调用为:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM