3

我正在调用批处理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 它也会调用外部可执行文件。

但是当通过我的程序调用批处理脚本时,它根本不会调用外部程序。外部可执行文件生成一些文件。还将一些文本打印到标准输出。我既没有看到那些文本,也没有看到要生成的任何文件。

我什至尝试将目标可执行文件替换为notepad.exe然后出现一个消息框Application failed to initialize properly (0xc0150004) click on OK to terminate application

4

1 回答 1

2

我发现boost::process::context不是跨平台。我必须boost::process::win32_context在 Windows 上使用。并且可能有问题,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()解决了这个问题。

于 2013-01-06T16:41:51.050 回答