VS2008のC++で作成したEXEの実行

このQ&Aのポイント
  • VS2008のC++で作成したEXEファイルを別のPCで実行する際にエラーが発生する
  • エラーメッセージによると、アプリケーションの構成が正しくないため、再インストールが必要かもしれない
  • 同じVisual Studio 2008のC#で作成した実行ファイルは正常に動作する
回答を見る
  • ベストアンサー

VS2008 の C++ で作成したEXEの実行

Visual Studio 2008 の C++(C++ではなくC)で作成した実行ファイルを、Visual Studio 2008 がインストールされていないが別のPC(WinXP)で実行すると、 「このアプリケーションの構成が正しくないため、アプリケーションを開始できませんでした。アプリケーションを再度インストールすることにより問題が解決する場合があります。」 のエラーが出るだけで実行できません。 同様な内容のQ&Aも見ましたが、解決できないので質問します。 なお、参考になるかわかりませんが、 ・Microsoft Visual C++ 2008 SP1 再頒布可能パッケージ  vcredist_x86.exe はインストールしてあります。 ・同じVisualStudio2008のC#で作成した実行ファイルは、正常に動きます。 ・別のPC(Win2000)では、 msvcr90d.dll を C:\WINNT\system32 フォルダに入れると、正常に動きます。 よろしくお願いいたします。

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

  • ベストアンサー
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.6

>>単にバグを内包していてリリース版で問題が表面化しているだけの気がしますが。 >違う気がします。 VS2008から起動しても何も表示されずすぐ終了するなら十分バグです。 デバッグ版で問題がなくてもリリース版で動かないバグはプロでもやりがちなバグなので、あって当たり前だと思って下さい。初期化漏れ、配列の範囲外、ポインタ操作ミスなどが原因となります。 VS2008でデバッガが反応しないのであれば、意図した通りには動いてませんがプログラムはOSから見る限り正常に動いていると判断できます。 なので、こういう場合はウィンドウアプリならプログラムのあちこちに通過点をチェックするOutputDebugString()を埋め込むなどしてプログラムの何処を通ったか確認する必要があります。コンソールアプリならprintf()をあちこちに埋め込んで下さい。 あるいは下記の様にしてブレークポイントやステップ実行で終了指定してしまうポイントを見つけて下さい。 「方法 : リリース ビルドをデバッグする」 http://msdn.microsoft.com/ja-jp/library/fsk896zz.aspx

usatan2
質問者

お礼

回答ありがとうございます。 教示いただいた「方法 : リリース ビルドをデバッグする」でデバックしてみましたところ、 デバッグ版ではちゃんと制御が来るのに、リリース版では、コールバック関数の case WM_INITDIALOG: に制御が来ることなく、プログラムが終了していることがわかりました。 お手上げです。 >デバッグ版で問題がなくてもリリース版で動かないバグはプロでもやりがちなバグなので、あって当たり前だと思って下さい。初期化漏れ、配列の範囲外、ポインタ操作ミスなどが原因となります。 もっと簡単なテストプログラムで原因を究明しないと駄目そうですね。 お付き合いくださり、ありがとうございました。

その他の回答 (7)

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.8

そのダイアログリソースに何が付いています? と確認したつもりなのですが…… ダイアログにツリービューやリストビューがあった場合に、InitCommonControlsEx()などで初期化しないとダイアログ生成に失敗する。 という動作をすることがありますが。 >switch (msg) { にブレークポイントを設定して、まず、どんなメッセージが来ているのか…というのを確認する。 なんてのもアリかも知れませんが。 >DialogBox(hInstance, "IDD_DLGMAIN", NULL, (DLGPROC)DlgProc); の戻り値を確認する。とかもありでしょうかね。

usatan2
質問者

お礼

再度の回答ありがとうございます。 DialogBox(hInstance, "IDD_DLGMAIN", NULL, (DLGPROC)DlgProc); の戻り値を確認したところ、デバッグモードでは1、リリースモードでは-1でした。 ということで、デバッグモードとリリースモードの違いをいろいろ調べたところ、何と 構成プロパティ - 全般 - 文字セット が デバッグモードでは、  マルチバイト文字セットを使用する リリースモードでは、  UNICODE文字セットを使用する になっていました。これをデバッグモードと同じ設定にしたところ、あっさり正常動作するようになり、しかもリリースビルドした実行ファイルは、別のPC(vcredist_x86.exeをインストールしたWinXP)で正常に動作するようになりました。 ありがとうございました

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.7

>リリース版では、コールバック関数の >case WM_INITDIALOG: >に制御が来ることなく、プログラムが終了していることがわかりました。 そのダイアログにつけているリソース(コモンコントロール)はどんなのがあります? InitCommonControlsEx()とかの初期化を実施していなかったためWM_INITDIALOGまで進まない。 なんて事態に遭遇したことはありますけど……。

usatan2
質問者

お礼

回答ありがとうございます。 >そのダイアログにつけているリソース(コモンコントロール)はどんなのがあります? ダイアログは、コールバック関数を DlgProc に指定して int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow){ g_hInstance = hInstance; DialogBox(hInstance, "IDD_DLGMAIN", NULL, (DLGPROC)DlgProc); return 0; } で呼ぶだけです。コールバック関数 DlgProc の先頭では LRESULT CALLBACK DlgProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { switch (msg) { case WM_INITDIALOG: /* タイトルバー */ SetWindowText(hWnd, TITLEBAR); で処理を行っています。ダイアログが生成された初期にタイトルバーを表示するはずですが、ここに制御が来ないのです。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.5

情報が小出しにされているので全体的な状況がいまいちつかめておりません。 >VS2008のリリース版はエラーもありませんが無反応です。 こちらもSide-by-Side エラーだと思っていました。一応実行出来ているものと思われます。 この件に関しては開発PC上でVS2008からリリース版をF5実行した場合も同じでしょうか? 単にバグを内包していてリリース版で問題が表面化しているだけの気がしますが。 つまり、デバッグ版とは別件の問題です。

usatan2
質問者

お礼

zwi様、何度も回答ありがとうございます。 >こちらもSide-by-Side エラーだと思っていました。一応実行出来ているものと思われます。 VS2008のリリース版は、DependencyWalkerでは、Side-by-Side エラーは検出されていません。 まったく実行されません。つまり、正常ならばウインドウが開いて入力待ちになるのですが、起動しても何も表示されず、エラーもなく、すぐ正常終了(?)してしまうのです。 >この件に関しては開発PC上でVS2008からリリース版をF5実行した場合も同じでしょうか? 同じです。まったく何も表示されず、すぐ終了します。F5を押しても、Releaseフォルダ内のEXEファイルをダブルクリックしても同じです。 >単にバグを内包していてリリース版で問題が表面化しているだけの気がしますが。 違う気がします。 >情報が小出しにされているので全体的な状況がいまいちつかめておりません。 どこに問題があるかわからない状態なので、適切な情報を報告できず、すいません。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.4

msvcr90d.dll自体が開発環境の一部なんですが・・・。 たぶん、その他のdllに問題があるんだと思います。 他の方が言われるようにDependencyWalkerで調べるか、イベントログに詳細なエラーが出ていると思うので調べて貼り付けて下さい。

usatan2
質問者

お礼

再度回答ありがとうございます。 No2さんへのお礼に記載したとおり、不足するDLLはありません。 以下は、正常動作しないWinXPでDependencyWalkerを実行した結果です。 VS2008のリリース版は、エラーもありませんが無反応です。 VS2008のデバッグ版は、DLLの不足はありませんが、 「Error: Side-by-Side 設定情報の"XXX.exe"にエラーが含まれています.このアプリケーションの構成が正しくないため、アプリケーションを開始できませんでした。アプリケーションを再度インストールすることにより問題が解決する場合があります。 (14001).」 と表示されます。

  • wormhole
  • ベストアンサー率28% (1619/5654)
回答No.3

>>デバッグビルドしたプログラムは開発環境のないPCでは動作しません。 >msvcr90d.dllの入ったWin2000 では正常動作しますけど・・・ それは開発環境にしかない存在しないはずのDLLをWindows2000にいれてる状態(プログラムを実行させる分には開発環境と同じ状態)なので、それで正常動作するといっても意味ないですが・・・

usatan2
質問者

お礼

回答ありがとうございます。 >それは開発環境にしかない存在しないはずのDLLをWindows2000にいれてる状態(プログラムを実行させる分には開発環境と同じ状態)なので、それで正常動作するといっても意味ないですが・・・ そうではなくて、msvcr90d.dllを入れると Win2000 なら正常に動作するのに、WinXPでは正常にどうしてしないのか? また、どうすれば正常に動作させられるのかが知りたいのです。

  • ctmogawa
  • ベストアンサー率54% (6/11)
回答No.2

もしまだ行っていないようであれば、DependencyWalkerにで実行ファイルが必要としている関連ファイル(.dll等)を調べてはいかがでしょうか。

usatan2
質問者

お礼

回答ありがとうございます。 DependencyWalkerですか? 知りませんでした。 早速ダウンロードして実行してみました。 いずれも不足するDLLはありませんでした。 VS2008のリリース版は、エラーもありませんが無反応です。 VS2008のデバッグ版は、DLLの不足はありませんが、 「Error: Side-by-Side 設定情報の"XXX.exe"にエラーが含まれています.このアプリケーションの構成が正しくないため、アプリケーションを開始できませんでした。アプリケーションを再度インストールすることにより問題が解決する場合があります。 (14001).」 と表示されます。 BCC版のリリース・デバッグとも、MSVCR90D.dllが無いだけで、正常動作します。 ということで、残念ながら問題解決はできていません。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.1

デバッグビルドしたプログラムは開発環境のないPCでは動作しません。 あとmsvcr90d.dllを配布することはライセンス上禁止されています。 と言うことでリリースビルドを行なって下さい。ビルドの構成マネージャから切り替えることが出来ます。

usatan2
質問者

お礼

回答ありがとうございます。 リリースビルドを行なったところ、エラーすら出ずにまったく動きません。 泥沼にはまってしまいました。 なお、参考になるかわかりませんが、同一ソースをBCCでコンパイル・リンクするとデバッグ・リリースとも正常に動作します。 現在の状況を整理しますと以下のようになります。 コンパイラ | デバッグ     リリース ーーーーーー+ーーーーーーーーーーーーーーーーー VS2008   | 73KB *     28KB 動作せず BCC     | 95KB 正常動作  91KB 正常動作 *:VS2008の入ったXP,Win7、msvcr90d.dllの入ったWin2000 では正常動作、動かしたいWinXPのPCでは msvcr90d.dllを入れても、 「このアプリケーションの構成が正しくないため、アプリケーションを開始できませんでした。アプリケーションを再度インストールすることにより問題が解決する場合があります。」 のエラーが出るだけで実行できません。 >デバッグビルドしたプログラムは開発環境のないPCでは動作しません。 msvcr90d.dllの入ったWin2000 では正常動作しますけど・・・ >あとmsvcr90d.dllを配布することはライセンス上禁止されています。 知りませんでした。 配布する場合には、BCCでコンパイルした版にします。 ありがとうございます。 引き続き、  リリースモードで正常動作する実行ファイルの作り方  VS2008で作成した実行ファイルのVS2008がインストールしていないPCでの動かし方 について、回答お待ちしています。よろしくお願いします。

関連するQ&A

  • VS2005 C++ランタイムエラー

    環境 OS:windowsXP Pro SP3 開発環境:Visual Studio 2005 Academic Edition 開発言語:C++ 上記の環境で開発を行っているのですが、プログラムをデバックした時、添付画像のエラー(おそらくランタイムエラー)が発生し、VSが強制終了してしまいます。 解決方法を教えて頂きたく、宜しくお願い致します。 プロジェクト作成方法 Win32 コンソールアプリケーション→空のプロジェクトにチェック→ソースファイルにC++ファイル(cpp)を作成 実行ソース #include <iostream> using namespace std; int main() { cout << "hello" << endl; } 今まで試したこと Visual Studioの再インストール(一応Windows Install Clean Upを使用しました) 以下サイトより、Microsoft Visual C++ 2005 再頒布可能パッケージ (x86)のインストール http://jp.layer8.sh/reference/entry/show/id/2391 以上です。

  • C++でファイル実行について。

    最近C++の勉強を始めたばかりなのですが、 C++で作成したプログラムでファイル(例えばjpegやmp3)を実行する事は可能なのでしょうか?宜しくお願いします。 Visual Studio .NET 2003を使用しています。

  • C++が未インストールの端末でのexe実行

    初めてまだ2日目の初心者です。 Microsoft Visual C++ 6.0でプログラムを作成しています。 まずは参考書通りに作成してみて、リビルド→exeの作成までは上手くいきました。 作成されたexeファイルをプログラムを作成した端末で実行すると問題なく動作するのですが、 実際にそれを動かしたい端末(C++をインストールしていません)で動かすと 『MFC42.DLLが指定されたパス ○○;○○;○○ に見つからない』というエラーメッセージが出てしまいました。 (○○はパスです。例えばD:\Test) C++で作成したプログラムの実行にはMFC42.DLL,MSVCRT.DLLの2つが必要と あったのでMFC42.dllで検索をかけたところ、見つからないと表示された○○に ちゃんと存在していました。 無いのなら作成端末のDLLをコピー・貼り付けすれば良いかな、と思っていたのですが 今あるファイルに上書きしてよいものやら困っています。 C++をインストールしてSPをあてれば解決するのでしょうが、 エラーがでている端末にはC++をインストールしてはいけないと言われました。 C++未インストールマシンでexeを実行する為にはどうしたらよいか ご存知の方、教えてください!!

  • c# .Net Frameworkが不要なExeの作成

    Visual Studio 2008でC#のプログラムを作成したのですが、.Net FrameworkがインストールされていないPCでは使用できません。Exeに.Net Frameworkを含めることはできますか?

  • MSVCR110.dllがないため、プログラムが開

    MSVCR110.dllがないため、プログラムが開始できませんと出てきます 自宅サーバーでPHPをインストールしたく試みているのですが 上手くいきません 調べたら、Visual Studio 2012 更新プログラム 4 の Visual C++ 再頒布可能パッケージ というものをインストールすれば解決するとあるのですが 64bit版、32bit版どちらを入れても解決しませんでした どうすれば、解決できますでしょうか? 使用OSはWindows7 64bit版です

  • VC++2010再配布可能パッケージのインストール

    よくも知らずに不要かとMSVSやMSVC++とつくものをを適当にアンインストールしてしまい AVG free 2013が 「MSVCR100.DLL が見つからなかったため、アプリケーションを開始できませんでした。」 と表示され開けなくなりました。 調べるとMicrosoft Visual C++ 2010 再頒布可能パッケージ (x86)をインストール必要があるようで DLまではできたのですがインストールしようとすると 「このファイルの種類を開くプログラムを選択してください」 と表示され実行ができません。 実行するにはどのプログラムを使用すればいいのでしょうか?

  • VC++ .NET 2005 Expressで、Apacheのコンパイル

    VC++ .NET 2005 ExpressでApache2.0.59(ssl)をコンパイルし、コンパイル(コマンドラインからです。)まではうまくいったのですが、実行させようとすると、「MSVCR80.dllが見つからなかったため、このアプリケーションを開始できませんでした。...」というエラーが出て実行できません。 別のマシンであれば、Microsoft Visual C++ 2005 再頒布可能パッケージ を入れる必要がある(今までのように単なるコピーではだめ。)ことは分かったのですが、そもそもVC++入っているし、再頒布可能パッケージもインストールしてみたのですが、インストールせずに終了してしまいます。(多分既にランタイムがあるからだと思ってます。) どなたか原因が分かる方がいれば、アドバイスを下さい。

  • 実行ファイルを他のPCで使用するためのDLL

    お世話になっております。 VC2005を使用しております。 VC2005で作成した実行プログラムを、VisualStudioがインストールされていないパソコンで使用する時は、どうすればよいのでしょうか? vcredist_x86をインストールすればよいですが、直接必要なDLLを実行ファイルと一緒にインストールする方法はないのでしょうか? 教えてください。 よろしくお願いします。

  • VS 2005 で新規作成で困っています。

    ファイル - 新しいプロジェクト 【新しいプロジェクト】 Visual Studio にインストールされているテンプレートの中から (Windows アプリケーション)を選択 プロジェクト名はそのままで(OK)をクリックすると フォームの左下に プロジェクト"プロジェクト名"の作成に失敗しました。 が表示され、新しいフォームが作成できません。 再インストールをしたりしていますが、全くうまくいきません。 誰か教えて頂けますでしょうか。宜しくお願い致します。

  • cl.exeを実行すると、ダイアログが表示される

    今までは、Visual C++ Toolkit 2003のcl.exeを使っていたのですが、Visual Studio 8のcl.exeを使ってみたところ、ダイアログが表示されました。 表示されたダイアログのタイトル cl.exe - エントリ ポイントが見つかりません その内容 プロシージャ エントリポイント __security_error_handler がダイナミックリンク ライブラリ MSVCR80.dllから見つかりませんでした。 と表示されます。 推察するに、MSVCR80.dllを参照しているが、その中に__security_error_handlerというプロシージャがありませんでしたよということでしょうか。 しかし、MSVCR80.dllというファイルを参照した結果、__security_error_handlerプロシージャが見つからないのであって、MSVCR80.dll自体が見つからないというわけではないので、何をすれば問題が解決されるのかわかりません。 再インストールしてみましたが(アンインストールしてからではなく、再インストール操作)、だめでした。 インストール後の設定が間違っているだけの可能性もありますが、そこも含めて、何がいけないのかどうぞ教えてください。 ちなみに、インストール後は、 環境変数から pathに%VC%\binを追加 libパスをつくり、%VC%\libを追加 includeパスをつくり、%VC%\includeを追加 をしました。

専門家に質問してみよう