2

我正在尝试从我从 minggw 启动的 shell 脚本文件创建 EXE 文件(从 gi​​t 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?

4

2 回答 2

5

因为您正在从 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=位操作系统,请检查(误导性命名的)环境变量PROCESSOR_ARCHITECTUREx8632 位操作系统为“ ” AMD64,64 位操作系统为“”。

把它们放在一起:

对于 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 上也是如此)。

于 2013-09-24T13:39:47.167 回答
1

如果您将其调用为:

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

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

于 2013-09-24T13:28:53.887 回答