none
Visual C++ 2010 で、[Ctrl]+[F5]によって、ソリューションに含まれる2つ以上のEXEファイルを、順序を指定して実行する方法を教えてください。 RRS feed

  • 質問

  • こんにちは。

    現在、「Visual C++ 2010 Express」を使って、コンソールアプリケーションの開発について勉強しています。
    どうしてもわからないことが出てきたので、質問させて下さい。

    今、Sという名前のソリューションに、P1とP2という、2つのプロジェクトが含まれているとします。
    P1をビルドして作成されたP1.exeは、1つのファイルに、適当なデータを出力します。
    P2をビルドして作成されたP2.exeは、そのファイルの内容を読み取って、標準出力に出力します。

    Visual C++ 2010 Expressでは、[Ctrl]+[F5]で、作成されたexeファイルを実行できるのですが、
    どうやら、スタートアッププロジェクトのexeファイルしか実行されないようなんです。
    [Ctrl]+[F5]によって、P1.exeが実行された後に、P2.exeが実行されるようにするには、どうすればよいのでしょうか?
    プロジェクトやソリューションのプロパティをいじってみたのですが、
    どうも上手くいかなかったので、質問させて頂きました。

    一応、P1とP2のソースファイルの内容を、以下に載せておきます。

    ・P1.cpp
    -----------------------------------------------
    int main(int argc, char *argv[])

     char str[1000];
     
     //出力用にファイルをオープンする。
     ofstream fw("file.txt");
     if(!fw){
      cout<<"「file.txt」が開けない!\n";
      exit(1);
     }

     //ファイルにデータを書き込む。
     cout<<"出力ファイルに書き込む文字列を入力せよ。"<<endl;
     cin>>str;
     fw<<str<<endl;
     fw<<100<<endl;
     fw<<200<<endl;
      
     fw.close();

     return 0;
    }
    -----------------------------------------------

     

    ・P2.cpp
    -----------------------------------------------
    int main(int argc, char *argv[])

     char ch;
     
     //読み取り用にファイルをオープンする。
     ifstream fr("file.txt");
     if(!fr){
      cout<<"「file.txt」が開けない!\n";
      exit(1);
     }

     cout<<"file.txtの内容を読み込み、以下に表示する。\n";

     while( fr.get(ch) ){
      cout<<ch;
     } 
      
     return 0;
    }
    -----------------------------------------------

    ちなみに、各プロジェクトの「作業ディレクトリ」は、
    共通のディレクトリに設定しているので、
    「file.txt」は、そこで入出力されるようになっています。

    以上、よろしくお願い致します。

     

    2012年11月19日 3:14

回答

  • ソリューションのプロパティでスタートアッププロジェクトを指定できます。複数実行したいのであればマルチスタートアッププロジェクトを選択してください。

    • 回答の候補に設定 佐伯玲 2012年11月22日 1:11
    • 回答としてマーク 佐伯玲 2012年11月27日 1:23
    2012年11月19日 4:17
  • ソリューションに含まれるあるプロジェクトの実行が終わった後に、別のプロジェクトを実行するような仕組みは、標準にはなかったように記憶しています。(マルチスタートアップも順序こそありますが、終了待ちはしないので順次実行と記憶していますが、違ったらご指摘ください)

    今回のコードの場合、同じファイルに順序よくアクセスしないといけないという条件であると考えると、標準的な方法はないと思います。Express なのでアドオン・エクステンションの可能性もないのでプロジェクトのプロパティのデバッグ対象のプログラムにバッチファイルを指定するなど、工夫するしかないかと。

    • 回答の候補に設定 佐伯玲 2012年11月22日 1:11
    • 回答としてマーク 佐伯玲 2012年11月27日 1:23
    2012年11月19日 13:48
    モデレータ

すべての返信

  • ソリューションのプロパティでスタートアッププロジェクトを指定できます。複数実行したいのであればマルチスタートアッププロジェクトを選択してください。

    • 回答の候補に設定 佐伯玲 2012年11月22日 1:11
    • 回答としてマーク 佐伯玲 2012年11月27日 1:23
    2012年11月19日 4:17
  • ソリューションに含まれるあるプロジェクトの実行が終わった後に、別のプロジェクトを実行するような仕組みは、標準にはなかったように記憶しています。(マルチスタートアップも順序こそありますが、終了待ちはしないので順次実行と記憶していますが、違ったらご指摘ください)

    今回のコードの場合、同じファイルに順序よくアクセスしないといけないという条件であると考えると、標準的な方法はないと思います。Express なのでアドオン・エクステンションの可能性もないのでプロジェクトのプロパティのデバッグ対象のプログラムにバッチファイルを指定するなど、工夫するしかないかと。

    • 回答の候補に設定 佐伯玲 2012年11月22日 1:11
    • 回答としてマーク 佐伯玲 2012年11月27日 1:23
    2012年11月19日 13:48
    モデレータ
  • 御回答ありがとうございます。

    >マルチスタートアップも順序こそありますが、終了待ちはしないので順次実行と記憶していますが、違ったらご指摘ください

    仰る通りだと思います。
    ソリューションプロパティで、「マルチスタートアッププロジェクト」を選択し、
    P1とP2の「アクション」を「デバッグなしで開始」にして、
    [Ctrl]+[F5]とタイプしてみたのですが、P1.exeの実行が終了する前に、
    P2.exeが開始されました。


    >プロジェクトのプロパティのデバッグ対象のプログラムにバッチファイルを指定するなど、工夫するしかないかと。

    なるほど、バッチスクリプトを使う手がありますね。
    試してみます。

    2012年11月19日 18:59
  • こんにちは、kei-k0625 さん
    フォーラムオペレータの佐伯 玲 です。

    その後お試しいただいた結果はいかがでしょうか?
    参考になる情報だと思われたので勝手ながら私のほうで「回答としてマーク」とさせて頂きました。

    MSDN フォーラムでは解決に至った情報にはひとつ区切りを付ける意味でも「回答としてマーク」するようにお願いさせていただいています。
    もし解決に至らなかった場合には回答マークを解除することも可能ですので宜しくお願いいたします。

    回答マークがついていると同じような疑問を持っている方などが後からこのスレッドを見る時に解決に至ったスレッドかどうか判別しやすくなります。
    また情報を寄せてくださった方たちに寄せられた情報が有効であったのかご連絡する意味でも回答のマークと経過の報告をお願いさせていただいております。

    宜しくお願いいたします。
    __________________________
    日本マイクロソフト株式会社 フォーラム オペレータ 佐伯 玲

    2012年11月27日 1:23