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,我检查了我的变量并在环境中四处寻找。
- 用户名正确
- window 运行 作为管理员(出于其他原因)
PATH
没问题(一开始不应该与 cd
有任何关系)
四处寻找时,如果我尝试更改目录,它声称 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
)
当 运行 批处理作为来自 VS 的 post-build 事件时,我的一些文件夹对命令行不可见。错误日志和输出日志不伦不类。
在我的后续批次中,我无法访问 SCP (System32\OpenSSH\scp.exe)
构建事件:
IF NOT DEFINED PUBLISHING (
set PUBLISHING ='ON'
call "$(ProjectDir)Publish.bat"
PUBLISHING=
)
将 call
更改为 start
,弹出命令 window,我检查了我的变量并在环境中四处寻找。
- 用户名正确
- window 运行 作为管理员(出于其他原因)
PATH
没问题(一开始不应该与cd
有任何关系)
四处寻找时,如果我尝试更改目录,它声称 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
)