gpt4 book ai didi

c++ - 从 C++ CreateProcess 启动 Windows 批处理有不同的行为

转载 作者:行者123 更新时间:2023-11-30 05:19:18 27 4
gpt4 key购买 nike

环境:windows 10,VS2013。

我有一个 C++ 应用程序,使用 Poco 框架 (Poco 1.7.6),我需要启动一些批处理文件。它没有问题,但对于特定的脚本,我无法弄清楚原因。这个特定的脚本如下(我们称之为 buildMySolution.bat):

set BUILD_DIR=%~dp0
call "C:\Program Files(x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"
msbuild /p:Platform=%~1 /p:Configuration=%~2 %BUILD_DIR%\Mysolution.sln

如您所见,批处理文件只是编译了一个 VS2013 解决方案。不用说,如果从命令行启动,这个简单的批处理工作得非常好。

问题是这个批处理在驱动器 D: 中(在 D:\DevRoot\build\MySolution 中)并且当从我的应用程序启动时(也在 D:\驱动器中),我得到第二行“找不到路径”。

我在批处理中尝试了几个修改:比如强制 C:cd/D C: ...它可以转到 C: 但不能更进一步,它拒绝cd 到包含 vcvarsall.bat 的目录(同样,我知道路径是正确的,因为同一个脚本可以从命令行正常执行)。然而,通过 cd/D %BUILD_DIR% 返回到初始目录没有问题。

要从我的 C++ 应用程序启动脚本,我使用这个:

Poco::ProcessHandle handleBuild = Poco::Process::launch(path_to_script, argsBuild);
handleBuild.wait();

Poco launch 只是 CreateProcessA() 的薄包装,我在他们的代码中没有看到任何特别之处 (Poco Process.cpp)。

我也尝试将工作目录指定为包含 vcvarsall.bat 的目录,但是 CreateProcess 失败了。

最佳答案

我刚刚找到了一个解决方案:我更改了行(在批处理 buildMySolution.bat 中):

call "C:\Program Files(x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"

到:

call C:\PROGRA~2\micros~1.0\vc\vcvarsall.bat

信不信由你:使用 DOS 名称并删除引号使其有效!!!

错误或功能,我不确定...

关于c++ - 从 C++ CreateProcess 启动 Windows 批处理有不同的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41206320/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com