none
exeファイルを実行できない

    質問

  • こんにちは。すごく初歩的な質問かもしれませんが、ご回答よろしくお願い致します。

    Visual Studio Express 2013でOpen CV(version 3.1)を使ってプログラムを作成しました。

    プログラム自体は完成しており、デバック開始を押すとプログラムが実行されます。

    このプラグラムを実行ファイル(.exeファイル)から実行したいと考えており、

    [Release]フォルダ内に.exeファイルが出来ておりましたので、これを起動すればデバック開始の時と同じようにプログラムが

    実行されると思っていたのですが、実際は一瞬だけwindowsフォーム(←一瞬すぎて何が出ているのかよくわかりません)のようなものが出て直ぐに消えてしまいます。

    どのようにすれば実行ファイルからプログラムを起動させることが出来るのでしょうか?

    [環境]

    ・使用しているVisual Studioのバージョン・エディション:Visual Studio Express 2013

    ・使用している言語の種類:C++

    ・実行環境のOSのバージョン・エディション:Windows10 Home 64bit

    ・対象の.NET Frameworkのバージョン:不明

    ・プロジェクトの種類:コンソールアプリケーション(?)

    [機能の目的、仕様]

    実行ファイル(.exeファイル)からプログラムを実行する

    [問題点(つまづいている箇所)]

    ・結果の予想(期待していること):実行ファイル(.exeファイル)を起動するとプログラムが動く

    ・実際の結果(現状はどうなっているか、どのような):実行ファイルを起動すると一瞬何かが出て直ぐに消えてしまう。

    [調査、検証]

    ・試した手順・調べこと(再現手順、参照したサポート情報/MSDNライブラリ):次のサイトでexeファイルの作成方法を調べました。

    http://www.osakac.ac.jp/labs/tomioka/manual/Program/

    ・Visual Studioで操作したこと:

    ①Visual Studioを起動し、[ファイル→新しいプロジェクト]を選択。

    ②C++を選んで「Win32」を選ぶ。「テンプレート」で「Win32 コンソールアプリケーション」を選択する。

    ③「アプリケーションの種類」は「コンソールアプリケーション」を選択、「追加のオプション」で「空のプロジェクト」にチェックを付けて完了ボタンを押す。

    ④ソリューションエクスプローラのソースフォルダ上で、マウスの右ボタンを押して、[追加→新しい項目」を選択。

    ⑤[C++ファイル]を追加する。

    ⑥追加したソース・ファイルにソースコードを入力。

    (以下、Open CV用の操作)

    ⑦ソリューションエクスプローラでプロジェクトを選択して、マウスの右ボタンを押して[プロパティ]メニューを選択。

    ⑧構成を[すべての構成]に変更、[C/C++]→[全般]→[追加のインクルードディレクトリ]へ「C:¥opencv¥build¥include;」を、「リンカー」→「追加のライブラリディレクトリ」へ「C:¥opencv¥build¥x64¥vc12¥lib;」を入力。

    ⑨構成をDebugからReleaseに変更。

    ⑩構成マネージャを開き、ダイアログボックスが現れたら、「新規作成」を選択する。

    ⑪「新しいソリューションプラットフォーム」ダイアログボックスが現れ、「新しいプラットフォームを入力または選択してください」のドロップダウン矢印をクリックし、「x64」ビットプラットフォームを選択する。設定のコピー元を「Win32」にする。

    ⑫ビルドの実行。

    以上、お手数をお掛板しますが、ご回答よろしくお願い致します。

    2017年3月19日 10:04

回答

  • プログラム自体は完成しており、デバック開始を押すとプログラムが実行されます。
    (略)

    どのようにすれば実行ファイルからプログラムを起動させることが出来るのでしょうか?

    Visual Studio で Release 構成を選択している状態でデバッグ開始を押してもきちんと動く状態になっていますか?
    Debug 構成でしか動かないという状態であれば、その視点から設定に差がないかとチェックし直すがことが必要です。

    たとえば、Release 構成だとビルドエラーになるとか、インクルードディレクトリの設定ができてなかったとか、そういう漏れがないですか?

    http://www.osakac.ac.jp/labs/tomioka/manual/Program/

    さすがにこのサイトの記載は古すぎて、今の環境では参考にならないかと思います。。。

    2017年3月19日 10:42
    モデレータ
  • コンソールアプリケーションは実行されていますが、処理時間が短いために一瞬だけコマンドプロンプトのウィンドウが表示されているのだと思われます。

    コンソールアプリケーションを作成するとコマンドプロンプト(cmd.exe)上でアプリケーションが実行されますが、エクスプローラーでダブルクリックして実行した場合は自動でマンドプロンプトウィンドウが作成されて実行され、コンソールアプリケーションが終了するとウィンドウが閉じられます。
    (コンソールアプリケーションは基本的には自分ではウィンドウを作りません)

    この場合はエクスプローラーのダブルクリックから実行するのではなく、コマンドプロンプトをあらかじめ起動しておいて、その中でコンソールアプリケーションのパスを入力して実行することで、コマンドプロンプトウィンドウは閉じられなくなります。

    あるいはコンソールアプリケーションの最後に

    int _tmain(int argc, _TCHAR* argv[])
    {
    	//自分のコード
    
    	//終了待ちする
    	printf("Hit Any Key");
    	getchar();
    	return 0;
    }
    のような終了待ちを入れることでコマンドプロンプトが閉じる前に結果を見ることができるようになります。

    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    2017年3月19日 11:27
  • Pythonのコードを見ているのでC++だとちょっと違うかも。
    cv2.imshow の後、 cv2.waitKey(ミリ秒)
    詳しいことは調べて。(要はgekkaさんと同じ)

    Jitta@わんくま同盟

    2017年3月21日 2:28

すべての返信

  • プログラム自体は完成しており、デバック開始を押すとプログラムが実行されます。
    (略)

    どのようにすれば実行ファイルからプログラムを起動させることが出来るのでしょうか?

    Visual Studio で Release 構成を選択している状態でデバッグ開始を押してもきちんと動く状態になっていますか?
    Debug 構成でしか動かないという状態であれば、その視点から設定に差がないかとチェックし直すがことが必要です。

    たとえば、Release 構成だとビルドエラーになるとか、インクルードディレクトリの設定ができてなかったとか、そういう漏れがないですか?

    http://www.osakac.ac.jp/labs/tomioka/manual/Program/

    さすがにこのサイトの記載は古すぎて、今の環境では参考にならないかと思います。。。

    2017年3月19日 10:42
    モデレータ
  • コンソールアプリケーションは実行されていますが、処理時間が短いために一瞬だけコマンドプロンプトのウィンドウが表示されているのだと思われます。

    コンソールアプリケーションを作成するとコマンドプロンプト(cmd.exe)上でアプリケーションが実行されますが、エクスプローラーでダブルクリックして実行した場合は自動でマンドプロンプトウィンドウが作成されて実行され、コンソールアプリケーションが終了するとウィンドウが閉じられます。
    (コンソールアプリケーションは基本的には自分ではウィンドウを作りません)

    この場合はエクスプローラーのダブルクリックから実行するのではなく、コマンドプロンプトをあらかじめ起動しておいて、その中でコンソールアプリケーションのパスを入力して実行することで、コマンドプロンプトウィンドウは閉じられなくなります。

    あるいはコンソールアプリケーションの最後に

    int _tmain(int argc, _TCHAR* argv[])
    {
    	//自分のコード
    
    	//終了待ちする
    	printf("Hit Any Key");
    	getchar();
    	return 0;
    }
    のような終了待ちを入れることでコマンドプロンプトが閉じる前に結果を見ることができるようになります。

    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    2017年3月19日 11:27
  • Pythonのコードを見ているのでC++だとちょっと違うかも。
    cv2.imshow の後、 cv2.waitKey(ミリ秒)
    詳しいことは調べて。(要はgekkaさんと同じ)

    Jitta@わんくま同盟

    2017年3月21日 2:28
  • こんにちは、twinbirdXS さん
    フォーラム オペレーターの立花楓です。

    こちらの質問に関して、その後の状況はいかがでしょうか。

    Azulean さん、gekka さん、Jitta さんの情報が、問題解決のご参考になると思いましたので、私の方で回答マークを付けさせていただきました。
    ※問題が未解決の場合や不明点がある場合は、回答マークを外していただくことも可能です。

    寄せられている情報等をお試しいただき、進展がございましたらこちらのスレッドへご返信いただけますと幸いです。


    宜しくお願いします。


    MSDN/TechNet Community Support 立花楓

    2017年3月28日 2:29
    モデレータ