
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 フォルダに入れると、正常に動きます。
よろしくお願いいたします。
No.6ベストアンサー
- 回答日時:
>>単にバグを内包していてリリース版で問題が表面化しているだけの気がしますが。
>違う気がします。
VS2008から起動しても何も表示されずすぐ終了するなら十分バグです。
デバッグ版で問題がなくてもリリース版で動かないバグはプロでもやりがちなバグなので、あって当たり前だと思って下さい。初期化漏れ、配列の範囲外、ポインタ操作ミスなどが原因となります。
VS2008でデバッガが反応しないのであれば、意図した通りには動いてませんがプログラムはOSから見る限り正常に動いていると判断できます。
なので、こういう場合はウィンドウアプリならプログラムのあちこちに通過点をチェックするOutputDebugString()を埋め込むなどしてプログラムの何処を通ったか確認する必要があります。コンソールアプリならprintf()をあちこちに埋め込んで下さい。
あるいは下記の様にしてブレークポイントやステップ実行で終了指定してしまうポイントを見つけて下さい。
「方法 : リリース ビルドをデバッグする」
http://msdn.microsoft.com/ja-jp/library/fsk896zz …
回答ありがとうございます。
教示いただいた「方法 : リリース ビルドをデバッグする」でデバックしてみましたところ、
デバッグ版ではちゃんと制御が来るのに、リリース版では、コールバック関数の
case WM_INITDIALOG:
に制御が来ることなく、プログラムが終了していることがわかりました。
お手上げです。
>デバッグ版で問題がなくてもリリース版で動かないバグはプロでもやりがちなバグなので、あって当たり前だと思って下さい。初期化漏れ、配列の範囲外、ポインタ操作ミスなどが原因となります。
もっと簡単なテストプログラムで原因を究明しないと駄目そうですね。
お付き合いくださり、ありがとうございました。
No.8
- 回答日時:
そのダイアログリソースに何が付いています?
と確認したつもりなのですが……
ダイアログにツリービューやリストビューがあった場合に、InitCommonControlsEx()などで初期化しないとダイアログ生成に失敗する。
という動作をすることがありますが。
>switch (msg) {
にブレークポイントを設定して、まず、どんなメッセージが来ているのか…というのを確認する。
なんてのもアリかも知れませんが。
>DialogBox(hInstance, "IDD_DLGMAIN", NULL, (DLGPROC)DlgProc);
の戻り値を確認する。とかもありでしょうかね。
再度の回答ありがとうございます。
DialogBox(hInstance, "IDD_DLGMAIN", NULL, (DLGPROC)DlgProc);
の戻り値を確認したところ、デバッグモードでは1、リリースモードでは-1でした。
ということで、デバッグモードとリリースモードの違いをいろいろ調べたところ、何と
構成プロパティ - 全般 - 文字セット が
デバッグモードでは、
マルチバイト文字セットを使用する
リリースモードでは、
UNICODE文字セットを使用する
になっていました。これをデバッグモードと同じ設定にしたところ、あっさり正常動作するようになり、しかもリリースビルドした実行ファイルは、別のPC(vcredist_x86.exeをインストールしたWinXP)で正常に動作するようになりました。
ありがとうございました
No.7
- 回答日時:
>リリース版では、コールバック関数の
>case WM_INITDIALOG:
>に制御が来ることなく、プログラムが終了していることがわかりました。
そのダイアログにつけているリソース(コモンコントロール)はどんなのがあります?
InitCommonControlsEx()とかの初期化を実施していなかったためWM_INITDIALOGまで進まない。
なんて事態に遭遇したことはありますけど……。
回答ありがとうございます。
>そのダイアログにつけているリソース(コモンコントロール)はどんなのがあります?
ダイアログは、コールバック関数を 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);
で処理を行っています。ダイアログが生成された初期にタイトルバーを表示するはずですが、ここに制御が来ないのです。
No.5
- 回答日時:
情報が小出しにされているので全体的な状況がいまいちつかめておりません。
>VS2008のリリース版はエラーもありませんが無反応です。
こちらもSide-by-Side エラーだと思っていました。一応実行出来ているものと思われます。
この件に関しては開発PC上でVS2008からリリース版をF5実行した場合も同じでしょうか?
単にバグを内包していてリリース版で問題が表面化しているだけの気がしますが。
つまり、デバッグ版とは別件の問題です。
zwi様、何度も回答ありがとうございます。
>こちらもSide-by-Side エラーだと思っていました。一応実行出来ているものと思われます。
VS2008のリリース版は、DependencyWalkerでは、Side-by-Side エラーは検出されていません。
まったく実行されません。つまり、正常ならばウインドウが開いて入力待ちになるのですが、起動しても何も表示されず、エラーもなく、すぐ正常終了(?)してしまうのです。
>この件に関しては開発PC上でVS2008からリリース版をF5実行した場合も同じでしょうか?
同じです。まったく何も表示されず、すぐ終了します。F5を押しても、Releaseフォルダ内のEXEファイルをダブルクリックしても同じです。
>単にバグを内包していてリリース版で問題が表面化しているだけの気がしますが。
違う気がします。
>情報が小出しにされているので全体的な状況がいまいちつかめておりません。
どこに問題があるかわからない状態なので、適切な情報を報告できず、すいません。
No.4
- 回答日時:
msvcr90d.dll自体が開発環境の一部なんですが・・・。
たぶん、その他のdllに問題があるんだと思います。
他の方が言われるようにDependencyWalkerで調べるか、イベントログに詳細なエラーが出ていると思うので調べて貼り付けて下さい。
再度回答ありがとうございます。
No2さんへのお礼に記載したとおり、不足するDLLはありません。
以下は、正常動作しないWinXPでDependencyWalkerを実行した結果です。
VS2008のリリース版は、エラーもありませんが無反応です。
VS2008のデバッグ版は、DLLの不足はありませんが、
「Error: Side-by-Side 設定情報の"XXX.exe"にエラーが含まれています.このアプリケーションの構成が正しくないため、アプリケーションを開始できませんでした。アプリケーションを再度インストールすることにより問題が解決する場合があります。 (14001).」
と表示されます。
No.3
- 回答日時:
>>デバッグビルドしたプログラムは開発環境のないPCでは動作しません。
>msvcr90d.dllの入ったWin2000 では正常動作しますけど・・・
それは開発環境にしかない存在しないはずのDLLをWindows2000にいれてる状態(プログラムを実行させる分には開発環境と同じ状態)なので、それで正常動作するといっても意味ないですが・・・
回答ありがとうございます。
>それは開発環境にしかない存在しないはずのDLLをWindows2000にいれてる状態(プログラムを実行させる分には開発環境と同じ状態)なので、それで正常動作するといっても意味ないですが・・・
そうではなくて、msvcr90d.dllを入れると Win2000 なら正常に動作するのに、WinXPでは正常にどうしてしないのか? また、どうすれば正常に動作させられるのかが知りたいのです。
No.2
- 回答日時:
もしまだ行っていないようであれば、DependencyWalkerにで実行ファイルが必要としている関連ファイル(.dll等)を調べてはいかがでしょうか。
回答ありがとうございます。
DependencyWalkerですか? 知りませんでした。
早速ダウンロードして実行してみました。
いずれも不足するDLLはありませんでした。
VS2008のリリース版は、エラーもありませんが無反応です。
VS2008のデバッグ版は、DLLの不足はありませんが、
「Error: Side-by-Side 設定情報の"XXX.exe"にエラーが含まれています.このアプリケーションの構成が正しくないため、アプリケーションを開始できませんでした。アプリケーションを再度インストールすることにより問題が解決する場合があります。 (14001).」
と表示されます。
BCC版のリリース・デバッグとも、MSVCR90D.dllが無いだけで、正常動作します。
ということで、残念ながら問題解決はできていません。
No.1
- 回答日時:
デバッグビルドしたプログラムは開発環境のないPCでは動作しません。
あとmsvcr90d.dllを配布することはライセンス上禁止されています。
と言うことでリリースビルドを行なって下さい。ビルドの構成マネージャから切り替えることが出来ます。
回答ありがとうございます。
リリースビルドを行なったところ、エラーすら出ずにまったく動きません。
泥沼にはまってしまいました。
なお、参考になるかわかりませんが、同一ソースを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が見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Windows PowerShellでC言語を実...
-
Visual Studio 「AnyCpu」について
-
mscorlib.dllの初回例外について
-
JP1から起動したexeでhttpリク...
-
VB2005 Vistaで印刷ができません
-
外部exe呼び出しの方法 ShellEx...
-
excel vbaから実行するexe実行...
-
Eclipse CDT MinGWによるC言語
-
C++初心者です。 debug asserti...
-
VB.net(WEB)プログラムのPDFフ...
-
ACCESSランタイムでエラー
-
ActiveX → VB を起動するとCre...
-
Format 関数のバグ?
-
VB6.0 exe作成時に実行時エラー...
-
ActiveDirectoryから値を取得
-
デバック時エラーなし、アプリ...
-
C#VB、exeに埋め込んだexeの実行
-
「読み込み違反」が起きたとき...
-
vba 時間の引き算 例えば 15:00...
-
アウトルックが起動しているか...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Visual Studio 「AnyCpu」について
-
「読み込み違反」が起きたとき...
-
excel vbaから実行するexe実行...
-
C++初心者です。 debug asserti...
-
VB6.0 exe作成時に実行時エラー...
-
実行ファイル(.exe)が別のPC...
-
mscorlib.dllの初回例外について
-
Windows PowerShellでC言語を実...
-
外部exe呼び出しの方法 ShellEx...
-
技術評論社 Microsof...
-
ActiveDirectoryから値を取得
-
C#VB、exeに埋め込んだexeの実行
-
VS2008 の C++ で作成したEXEの...
-
VB.NetのWinsockについて
-
エラーが出ても、それより後の...
-
androidで.exeを実行できますか?
-
VisualStudioでC#が実行できない
-
VBで「ファイル名を指定して実...
-
JP1/File Transmission Server/...
-
Format 関数のバグ?
おすすめ情報