boost.prrocess批处理脚本无法运行其他程序
boost.process batch script is not able to to run another program
我正在使用Boost.process
通过cmd.exe /C
调用批处理脚本
boost::process::context context;
context.stdout_behavior = boost::process::capture_stream();
#ifdef WIN32
arguments.push_front("/c");
arguments.push_front(_script);
boost::process::child external_process = boost::process::launch("cmd.exe", arguments, context);
#else
boost::process::child external_process = boost::process::launch(_script, arguments, context);
#endif
boost::process::status status_code = external_process.wait();
如果我直接调用批处理文件,即使使用cmd.exe/C,它也会调用外部可执行文件。
但是当批处理脚本通过我的程序调用时,它根本不会调用外部程序。外部可执行文件生成一些文件。还将一些文本打印到stdout。我既没有看到这些文本,也没有看到任何要生成的文件。
我甚至尝试用notepad.exe
替换目标可执行文件,然后出现一个消息框Application failed to initialize properly (0xc0150004) click on OK to terminate application
我发现boost::process::context
不是跨平台的。我必须在Windows上使用boost::process::win32_context
。可能是silence_stream
有问题,也可能是我这边的问题。
//I've a list of argv in arguments
#ifdef WIN32
arguments.pop_front();
arguments.push_front(_script);
arguments.push_front("/C");
arguments.push_front("script.bat");
boost::process::win32_context win32_context;
win32_context.stdout_behavior = boost::process::capture_stream();
win32_context.environment = boost::process::self::get_environment();
boost::process::child external_process = boost::process::win32_launch(std::string("C:/Windows/System32/cmd.exe"), arguments, win32_context);
#else
boost::process::context context;
context.stdout_behavior = boost::process::silence_stream();
boost::process::child external_process = boost::process::launch(_script, arguments, context);
#endif
boost::process::status status_code = external_process.wait();
它没有得到PATH
,所以应用程序找不到dll
。win32_context.environment = boost::process::self::get_environment()
解决了这个问题。
相关文章:
- Qt版本应该在其他计算机上运行吗?
- 生成线程并在运行时执行其他操作,只要它处于活动状态
- 只知道运行时的数据类型.如何将数据详细信息隐藏到使用它们的其他类
- 如何在不受其他文件影响的情况下"by itself" Visual Studio 项目中运行C++文件?
- 还有其他方法可以为乘法表编写循环以获取运行时值吗?
- 在后台循环,同时运行其他语句 C++
- C++ 从 'main' 中运行其他程序的最佳实践
- 包含并运行来自其他文件的函数
- Qt - 在其他线程上运行函数
- 在另一个 QThread 上运行成员方法时,无法将事件发送到其他线程拥有的对象
- 我的代码只会运行主函数,其他函数不会在C++中编译
- C - 如果语句问题.代码将不会运行其他,否则
- 如何确定其他线程是否正在运行?
- CreateProcess:某些应用程序运行其他应用程序
- 生成文件:从生成文件运行其他生成文件
- C 程序运行不正确的其他语句
- 是否有其他快速有效地运行这样的方法?CPP
- 为什么主函数可以调用并运行其他CPP文件的功能
- PIN工具是否可以插入一个bash脚本,其中包含运行其他命令的代码
- boost.prrocess批处理脚本无法运行其他程序