因为您正在从 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_ARCHITECTURE
。x86
32 位操作系统为“ ” 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 上也是如此)。