2017-10-31 8 views
1

これは、Visual Studio 2017(v141)で作成された "Hello World"テストです。私はこの問題がいくつかの32ビット/ 64ビットの不一致であると思うが、それを確認する方法がわからない。ブースト "CreateProcess failed"

私はデバッグx86として以下をコンパイルしています(_SCL_SECURE_NO_WARNINGSでオフにする警告がありますが、関連性がなく、#define _WIN32_WINNT 0x0501も行います)。 x64としてコンパイルしようとするとTRK0005が見つかりません: "CL.exe"を見つけることができませんでした。システムは、指定されたファイルを見つけることができません。

私はlibboost_XXX-vc141-mt-1_64.libライブラリにリンクしています。

実際のコードは、スロー

#include <iostream> 
#include <boost/process.hpp> 
#include <boost/process/windows.hpp> 

namespace bp = boost::process; 
int main(int argc, char * argv[]) 
{ 
    int result = bp::system("echo Hello"); 
} 

での "Microsoft C++例外:メモリ位置0x0137EE34でブースト::プロセス:: process_error" を

+0

コマンドシェルを見つけるために%COMSPEC%を使用しています。これは、コマンドプロセッサのコマンドです。 dir、copy、ifなどと同じように "cmd.exe/c echo Hello"で実行できます。 –

+0

ありがとうございます - 現在のインストールが完了するとすぐに試してみます。私のコードラインは、bp :: systemではなくstd :: systemを使用すると動作します。 – DLyons

+0

もちろん、system()関数はCreateProcess()を使用せず、Cmd.exeにジョブの実行を要求します。 Unixのやり方。 BoostがShellExecuteEx()を使用しない理由はわかりません。これは、ウィンドウ中心の方法でシェルにコマンドを実行するよう要求する方法です。しかたがない。 –

答えて

0

明らかにウィンドウズには、デフォルトシェルの概念はありません。あなたは明示的に呼び出すことができます。

int result = bp::system(bp::search_path("cmd.exe"), "/c", "echo Hello"); 

NOTE必要に応じて "echo.exe" という名前の実行可能ファイルがありません

int result = bp::system(bp::search_path("cmd.exe"), "/c", "echo %COMSPEC%");