VC++で作成したプログラムが2重に実行される

このQ&Aのポイント
  • VC++で作成したプログラムが意図せず2重に実行されてしまう問題が発生しています。どの設定項目が影響しているのか、またはコンパイラが壊れている可能性があるのか知りたいです。
  • VC++ 2010 Express SP1を使用して作成したプログラムが、実行すると2つのプロセスが起動し、1つのウィンドウが開かれます。キーを押すと閉じられ、同じメッセージが表示されるウィンドウが再度開かれます。同様の現象がDebugモードでもReleaseモードでも生じます。この問題について教えていただけないでしょうか。
  • VC++で作成したプログラムが2重に実行されてしまう問題に遭遇しました。Win Vista 32bitでVC++ 2010 Express SP1を使用しています。プログラムを実行すると2つのプロセスが起動し、1つのウィンドウが表示されます。ウィンドウを閉じると同じメッセージが表示される新しいウィンドウが開かれます。この問題が起こる原因や解決策について教えてください。
回答を見る
  • ベストアンサー

VC++で作成したプログラムが2重に実行される

 バージョンはVC++ 2010 Express SP1、OSはWin Vista 32bitです。例えばWin32コンソールアプリケーションのプロジェクトを作成し、以下のようなソースコードをビルドしたとします。 #include <iostream> #include <cstdlib> using namespace std; int main() { cout << "Hello, world!" << endl; system("PAUSE"); }  作成されたexeファイル(添付画像の1.exe)をダブルクリックで起動すると、画像のように2つのプロセスが開始され、1つのウィンドウが開きます。何かキーを押すとこのウィンドウが閉じるわけですが、その時、メモリ使用サイズの大きい方のプロセスが消え、小さい方のプロセスだけ残ります。そして、閉じたウィンドウと同じ"Hello, world!"と表示されたウィンドウがまた開きます。これを閉じるとプロセスも完全に終了します。  どうやら、同じプログラムが意図せず2重に実行されてしまうみたいなのです。Debugモードでも、Releaseモードでも、上記の例と全く異なるソースコードでも、Win32プロジェクトでも同様の現象が生じてしまいます。以前は1つのプロセスとしてプログラムが実行されていたのではなかったかと思うのですが、どの設定項目が影響してこの現象を生じてると考えられますか?あるいは、コンパイラが壊れてるのでしょうか(以前、VC++ 2008 Expressと共生させていたことがあります)?どうか皆様のお知恵をお貸しください。

noname#235168
noname#235168

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

確認だけど 「実はシングルクリックで実行するようになっている」 とかいうオチはないよね?

noname#235168
質問者

お礼

結局、原因はavastというアンチウイルスソフトのディープスクリーンという機能だったみたいです。大騒ぎしてすいません。アドバイスをくださり、ありがとうございました。

noname#235168
質問者

補足

exeファイルを右クリックメニューの「開く」を選択して実行しても同様の現象が起きますし、VC++の「デバッグ開始」や「デバッグなしで開始」で実行しても同様の現象が起きますので、そのオチはありません。ご心配ありがとうございます^^;

関連するQ&A

  • VC++2010の「#include <」

    VC++ で、他人の作ったソースコードをビルドして実行してみています。 (WinPcapのデベロッパ向けのライブラリを使った、サンプルプログラムです。) VC++自体、あまり理解が深くないのですが、 「#include <」まで書くと、「ヘッダファイル名が表示される」プロジェクトと、「そうではない」プロジェクトがあります。 「そうではない」方のプロジェクトだと、ビルド時にincludeするライブラリが足りないとか、そんな感じのエラーが表示されます。 ぱっと見の違いは、「ヘッダファイル名が表示される」プロジェクトの場合は、 ソリューションエクスプローラに、「外部依存関係」というフォルダのショートカットがあり、ライブラリがどっさりあります。 「そうではない」プロジェクトについても、「#include <」で、ヘッダファイルを表示してくれるようにしたいのですが、どの様にすればよいのでしょうか?★ プロジェクトのプロパティの、 C++>プリプロセッサ>プリプロセッサの定義 リンカー>入力>追加の依存ファイル はどちらのソースも同じにしたのですが…。

  • 【VC++2008】2つのmain()を1つのプロジェクトに含める方法

    【VC++2008】2つのmain()を1つのプロジェクトに含める方法 現在、WinXP proで、VC++2008 Express Editionを使用しています。 1つのプロジェクトでmain()がある2つのソースを 使い分けたいのですが、その方法を教えて頂けませんでしょうか。 (うろ覚えですが、VC++6.0の頃にはできたと思います。) 例えば、以下のような2つのソースを含んだ1つのプロジェクトの 設定方法を教えて頂きたくお願いします。 ※ソースを見やすくするため、全角スペースを入れています。 //ソース名:main01st.cpp #include<stdio.h> void main(){   printf("main01\n");  } } //ソース名:main02nd.cpp #include<stdio.h> void main(){   printf("main02\n");  } }

  • VC++2010Exデバック実行エラー

    VC++2010Expressのデバック実行時にエラーが出て困っています。 VC++初心者レベルです。 宜しくお願い致します。 VC++2010Expressにて、OpenCV2.2を使用したプログラムを組むため学習中です。 OSはXPです。 OpenCVのサンプルプログラムを includeファイル、libファイルのパス(デバッグ用lib)の設定をして、 ビルドは正常に完了するのですが、デバック実行時(メニューバーの三角ボタン)に エラーが発生し、下記文面のVC++のエラーダイアログボックスがでます。 ==== imgCapture.exe の 0x7c94e4ff (ntdll.dll) でハンドルされていない例外が発生しました: 0xC0000235: NtClose は NtSetInformationObject 経由のクローズから保護されているハンドルにコールされました。 ==== 1.OpenCVが原因の可能性 OpenCVの関数  cvCaptureFromCAM(0) の前に矢印がついて止まっており、OpenCV2.2が最近出たばかりなので、 そのバグではないかと疑いましたが、 別PCの同様の環境で同じプロジェクトをビルドし、デバック実行すると、問題なく動作しました。 2.VC++2010Expressのプロジェクト設定が原因の可能性 上記同様、同じプロジェクトで別PCで動作しているため問題ないようです。 3.VC++関連が原因の可能性 現在使用しているPCは、もともとVC++2008Expressをインストールしておりましたので、 アンインストールせず、VC++2010Expressをインストールしてしまったことが原因かと考え、 VC++2008Express、VC++2010Express、関連アプリケーションをアンインストールして、 VC++2010Expressのみインストールしなおしてみましたが、解決しませんでした。 4.環境変数の可能性 ビルドで生成された.exeファイルを直接実行すると問題なく実行されましたので、 dllのパス設定は問題ないようです。 ビルドで生成されたexeが直接実行できるので、VC++関連が原因だと考えているのですが、 VC++2010Expressをインストールしなおしても解決しないため、お手上げ状態です。 問題なくデバック実行できる別PCと同じ設定にしているつもりですが、見落としがあるかも知れません。 解決方法、見落とし、これを試してみてはなど、気がつかれたことがありましたら アドバイスよろしくお願いいたします。

  • C++のiostreamのインクルードが不可能です

    C++のiostreamのインクルードが不可能です。 とても初歩的な話でお恥ずかしいのですが、 Visual Studio 2012 Express for Windows DesktopにてC++の入門をしようとしている者です。 入門書の通り、iostreamをインクルードしてnamespaceをstdにして int main() { cout << "Hello, World!" << endl; return 0; } このようなHello,World!コードを作ったのですが、エラーが発生し、 ・ソースファイルを開けません "iostream" ・識別子 "cout", "endl" が定義されていません と表示され、デバッグエラーとなります。 プロジェクトの作り手順としては C++の空のプロジェクトからcppファイルをソースファイルに追加する手順です。 どなたか解決方法をご教授ください。

  • VC#2005で従来のWinアプリを作成するには?

    Windows2000pro-sp4,VC#2005 Express Edtionを使用しています。 VS6の頃のような従来のWindowsアプリを作成するにはどうすればよいのでしょうか? メニューから、ビルド→...の発行、とたどり、 アプリの発行場所にデスクトップを選んで完了しても、 従来のように.exeファイルが作成されのではなく、 setup.exeや*.exe.manifest,.exe.deploy,.application などが作成されます。 古い記憶では、.NETな環境では、VC++のみが従来のようなWinアプリが作れる、 とあるのですが、そうなのでしょうか?

  • プログラムの連続実行(VC++ 2010)

    こんにちは。 現在、「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」は、そこで入出力されるようになっています。 以上、よろしくお願い致します。

  • VC++6 EXEをDLLに変換

    VC++6の「Win32 Aplication」で作成したプロジェクトがあります。 ビルドするとEXEができますが、これをDLLにするには どうすればよいですか。 よろしくお願いします。

  • VC++6.0とVB6.0の開発方法

    どうかよろしくお願いします。 早速ですが私は今大学院生であり、大学院を中退してしまった先輩の開発したアプリケーションを改造したいと考えています。しかし、そのアプリに関して説明書が無く、自分でソースコードを解読し、改造しなければなりません。 アプリは起動するとエクスプローラのような画面になり、フォルダを選択してその中のファイルの設定項目に数値を入力し、メニューバーから「実行開始」を選択すると、ある現象のシミュレーション結果を出力する、といったソフトです。 その先輩はVisual Studio 6.0を用いて、VC++6.0とVB6.0で開発しており、(多分)全てのソースコードは残っています。たまにバグが出ますが、アプリもちゃんと動きます。 私は、こういったソフト開発はVisual Studio .NET 2002を用いてVC++.netでダイアログベースのMFCアプリケーションを作ったことならあるのですが、Visual Studio 6.0は使ったことが無く、VC++6.0とVB6.0の異なる言語でひとつのアプリを作ったことは未経験です。 現在、ソースコードと格闘中ですが、.NET 2002で開発したときの拡張子slnファイルが拡張子dswに該当するということと、おそらく先輩はアルゴリズム計算部分はVCで書いて、GUIの方はVBで書いたということくらいしか分かっていません。また、アプリのソースコードが入っているフォルダには[bin][src][include][lib][vb]といったフォルダがあり、[src]の下層にはまたソースコードが大量に入ったフォルダがあり、[bin]にはバイナリファイル、実行exeファイルが大量に入っています。[vb]にはVBで記述されたソースらしきものが入っています。 以上が背景なのですが、ソフトに詳しい方に幾つか質問させてください。 (1)このソフトを改造したいとすれば、具体的にどういう手順で改造すればよいですか? (2)VCの方はdswファイルについてビルドすればコンパイルされ、[bin]にexeが出来る?のですが、VBの方はコンパイル出来ません。なぜでしょうか? (3)このような異なる大量なexeファイルを、ひとつのアプリケーションとして構築するのはどうすれば良いのですか?これらのexeファイルは一つ一つがモジュール?であり、それらを結合する…といった理解でいいのでしょうか? (4)このVisual Studio 6.0で作られたソースを、現在フリーでダウンロードできるVisual Studio 2008 Express Editionに移行して改造することは、容易にできるでしょうか? 他にもたくさん疑問はあるのですが、とりあえず以上4つの疑問にお答え頂ける方がおりましたらご教授下さい。

  • VC Debugモード

    Visual Stdio .NET 2003 環境のDebugモードについて質問があります。 開発言語は C++です。 今、コマンドライン引数を以下のように設定し、ファイルに保存された 情報を処理するプログラムを作成しています。 test1.exe 0 ./input.txt ↑ [実行ファイル名][検索したい文字][処理したいファイルへのパス] 上のように入力した場合、argcは[3]を返すと思うのですが、Debug モードでいざ実行してみると、値は「4」となっていました。 コマンドライン引数はVCの「プロジェクト」→「**のプロパティ」 →左ウィンドウの「デバッグ」→右ウィンドウの「コマンド引数」に 上のように設定しています。 また、Debugモードでargv[0]を調べたところ、実行ファイルまでのパス が保存されていました。 なぜ、このようになるのでしょうか? あと本題からそれるのですが、ソースの中でVCがDebugモードで動作していることを知る方法はないでしょうか? もし、Debugモードなのかどうかがわかるのであれば、ソースをDebug モード用とReleseモード用とに切り替えられるようにしたいのですが。。。 合わせてお教えください。

  • CのDLLをVC++でコンパイルしたいのですが、エラーになってしまいます。

    c言語の初心者なのですが、質問させて下さい。 javaからCのDLLを呼び出したく、 (下記のソースを書いたのですが、VC++でコンパイルすると LIBCD.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です Debug/HelloWorld.exe : fatal error LNK1120: 外部参照 1 が未解決です。 と出てしまいます。 過去ログ等を見て、作成しているプロジェクトが悪いのかなと思い、 MFC appWizark(dll) win32 Application win32 Console Application win32 Dynamic-Link Library 等を作ってみてコンパイルしてみたのですが、駄目でした。 ちなみにDOSプロンプトで cl -IC:\j2sdk1.4.2_10\include\win32 -LD HelloWorl d.c -o HelloWorld.dll と実行するときちんとコンパイルできて、正常に実行も出来ました。 VC++でどうやればコンパイルできるのでしょうか? #include "HelloWorld.h" JNIEXPORT void JNICALL Java_HelloWorld_printMessage (JNIEnv *env, jobject me) { printf("Helo World!!!\n"); return; }

専門家に質問してみよう