boost.process批处理脚本无法运行另一个程序

时间:2013-01-05 19:43:24

标签: c++ winapi boost process batch-file

我正在使用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

1 个答案:

答案 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因此应用程序未能找到dllwin32_context.environment = boost::process::self::get_environment()解决了这个问题。