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を使用してもバッチファイルを直接呼び出すと、外部実行可能ファイルが呼び出されます。

しかし、バッチスクリプトが私のプログラムを介して呼び出された場合、外部プログラムはまったく呼び出されません。外部実行可能ファイルはいくつかのファイルを生成します。また、いくつかのテキストをstdoutに出力します。これらのテキストも、生成されるファイルも表示されません。

ターゲットの実行可能ファイルを次のように置き換えようとしましたがnotepad.exe、メッセージボックスが表示されますApplication failed to initialize properly (0xc0150004) click on OK to terminate application

4

1 に答える 1

2

私が発見したのはboost::process::context、クロスプラットフォームではありません。私はboost::process::win32_contextWindowsで使用する必要があります。に問題があったのかもしれませんし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()その問題を修正しました。

于 2013-01-06T16:41:51.050 に答える