我正在使用cmd.exe /C
Boost.process
调用批处理脚本
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
答案 0 :(得分:2)
我发现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()
解决了这个问题。