System32\xyz 在 VS 构建事件期间 运行 批处理时找不到文件夹

System32\xyz folder not found when running batch during VS build event

当 运行 批处理作为来自 VS 的 post-build 事件时,我的一些文件夹对命令行不可见。错误日志和输出日志不伦不类。

在我的后续批次中,我无法访问 SCP (System32\OpenSSH\scp.exe)

构建事件:

IF NOT DEFINED PUBLISHING (
set PUBLISHING ='ON'
call "$(ProjectDir)Publish.bat"
PUBLISHING=
)

call 更改为 start,弹出命令 window,我检查了我的变量并在环境中四处寻找。

四处寻找时,如果我尝试更改目录,它声称 System32\OpenSSH 不存在!
(绝对路径被截断)

管理员无法访问哪些系统文件夹?

根据 Mofi 的评论,

Please read the Microsoft documentation about WOW64 Implementation Details. There are two %SystemRoot%\System32 directories. Which one is used depends on execution environment, 32 or 64 bit environment.

很容易确定 VS 使用的 cmd 是 x86,因此无法访问相同的 System32 文件夹。为了使用 OpenSSH\SCP,我需要调用 x64 版本的 cmd。

这方面也可以参考Mofi的.

结果是这样的:
注意:这里我们启动一个新的cmd window 因为发布需要用户输入。一个普通的 "call" 也应该没问题

IF NOT DEFINED PUBLISHING (
set PUBLISHING='ON'
:: We know we are currently running x86, so call other cmd without checking version
start %SystemRoot%\Sysnative\cmd.exe /C call "$(ProjectDir)Publish.bat" 
PUBLISHING=
::Needed to add for build to 'succeed', not in original script post
exit /b 0 
)