Windows 7 32ビットのOSを使っています。
Visual Stduio C++で小さなコンソールプログラムを作りました。
それをWindows XPで実行すると「これは有効なWin32アプリではない」という
メッセージが出て実行できません。
同じソースコードを同じWindows 7 32ビットのOSにあるBorlandC++Builder6で
ビルドしたソフトをWindowsXPで実行すると普通に実行できました。
どうしてこのような不便な仕組みにVisual Studio 2013はしているのでしょうか?
有効なWin32アプリではない
Re: 有効なWin32アプリではない
古いOSを切り捨てるのは別におかしな話でもないと思います。そもそもMicrosoftとしてはサポート期間が過ぎているから使うなという話でしょう。沢村 さんが書きました: どうしてこのような不便な仕組みにVisual Studio 2013はしているのでしょうか?
C++Builder6はXPが現役の時のコンパイラなので実行できるのは当たり前ですね。
ところで、プラットフォームツールセットを切り替えることで、XPでも実行可能なバイナリを作れるようです。
http://gurigumi.s349.xrea.com/programmi ... 013_1.html
Re: 有効なWin32アプリではない
回答ありがとうございました。
>>古いOSを切り捨てるのは別におかしな話でもないと思います。
>>そもそもMicrosoftとしてはサポート期間が過ぎているから使うなという話でしょう。
このような前半の回答は予想していました。
>>ところで、プラットフォームツールセットを切り替えることで、XPでも実行可能なバイナリを作れるようです。
>>http://gurigumi.s349.xrea.com/programmi ... 013_1.html
これは知らなかったです。 うれしい!
プラットフォームツールセット を Visual Studio 2013 - Windows XP (v120_xp) に設定して
リビルドしてみました。 ビルドは成功! でも、
Windows XP にコピーして実行してみると、 「MSVCP120.dll が見つからなかったため、
このアプリを開始できなかった。 このアプリをインストールし直すとこの問題が解決する可能性がある。」
となって実行できない。
マイクロソフトのダウンロードサイトへ行って、
「Visual Studio 2013 の Visual C++ 再頒布可能パッケージ
Visual C++ 再頒布可能パッケージは、Visual Studio 2013 を使用してビルドされる C++ アプリケーションを実行するために必要なランタイム コンポーネントをインストールします。」をダウンロードして、Windows XP で実行してみた。 すると
「これは適合しないWindows OSなのでインストールできない」となりダメ。
Windows 7 では再配布可能パッケージは実行できたので、Windows 7 のSystemからMSVCP120.dllをコピーして
Windows XP へ入れてみた。 そして実行した。 すると、
「MSVCP120.dllは正しいWindowsイメージではない。これをインストールディスクのファイルと照合してください」
のメッセージが出てやっぱりダメでした。
あとは、どうしたらよいのでしょう? 照合って、どんなことをすることなのでしょうか?
>>古いOSを切り捨てるのは別におかしな話でもないと思います。
>>そもそもMicrosoftとしてはサポート期間が過ぎているから使うなという話でしょう。
このような前半の回答は予想していました。
>>ところで、プラットフォームツールセットを切り替えることで、XPでも実行可能なバイナリを作れるようです。
>>http://gurigumi.s349.xrea.com/programmi ... 013_1.html
これは知らなかったです。 うれしい!
プラットフォームツールセット を Visual Studio 2013 - Windows XP (v120_xp) に設定して
リビルドしてみました。 ビルドは成功! でも、
Windows XP にコピーして実行してみると、 「MSVCP120.dll が見つからなかったため、
このアプリを開始できなかった。 このアプリをインストールし直すとこの問題が解決する可能性がある。」
となって実行できない。
マイクロソフトのダウンロードサイトへ行って、
「Visual Studio 2013 の Visual C++ 再頒布可能パッケージ
Visual C++ 再頒布可能パッケージは、Visual Studio 2013 を使用してビルドされる C++ アプリケーションを実行するために必要なランタイム コンポーネントをインストールします。」をダウンロードして、Windows XP で実行してみた。 すると
「これは適合しないWindows OSなのでインストールできない」となりダメ。
Windows 7 では再配布可能パッケージは実行できたので、Windows 7 のSystemからMSVCP120.dllをコピーして
Windows XP へ入れてみた。 そして実行した。 すると、
「MSVCP120.dllは正しいWindowsイメージではない。これをインストールディスクのファイルと照合してください」
のメッセージが出てやっぱりダメでした。
あとは、どうしたらよいのでしょう? 照合って、どんなことをすることなのでしょうか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 有効なWin32アプリではない
わざわざ変なことをして使うよりは、VisualC++2008を使うとかMinGWを使うとかの選択肢もあるのですがダメなのでしょうか?
Visual Studio 2013 じゃないといけない理由を教えて下さい。
Visual Studio 2013 じゃないといけない理由を教えて下さい。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 有効なWin32アプリではない
ここからダウンロードしたのですよね。
Visual Studio 2013 の Visual C++ 再頒布可能パッケージ
これには、arm/x86/x64の3つのバージョンがありますが、どれをダウンロードしましたか。
Windows XPと言っても32bit/64bit両方あるので気を付けてください。通常XPは32bitの方が世の中に出回ってるのでx86がインストール可能だと思いますが、一応システム情報のOSを参照し64という文字がないか確認してください。
64という文字がなければx86、あればx64のセットアップを実行してください。
Visual Studio 2013 の Visual C++ 再頒布可能パッケージ
これには、arm/x86/x64の3つのバージョンがありますが、どれをダウンロードしましたか。
Windows XPと言っても32bit/64bit両方あるので気を付けてください。通常XPは32bitの方が世の中に出回ってるのでx86がインストール可能だと思いますが、一応システム情報のOSを参照し64という文字がないか確認してください。
64という文字がなければx86、あればx64のセットアップを実行してください。
最後に編集したユーザー へにっくす on 2014年5月06日(火) 12:13 [ 編集 1 回目 ]
written by へにっくす
Re: 有効なWin32アプリではない
MSVCP120.dllを必要としない実行ファイルを生成する設定にすれば再配布パッケージのインストールは必要なくなりますよ。
プロジェクトをVisualStudio2013で開いた状態で
[プロジェクト]->[プロパティ]
[構成プロパティ]->[C/C++]->[コード生成]
[ランタイムライブラリ]の項目を
[マルチスレッドDLL(/MD)]や[マルチスレッドデバッグDLL(/MDd)]から
[マルチスレッド(/MT)]や[マルチスレッドデバッグ(/MTd)]に変更。
プロジェクトをVisualStudio2013で開いた状態で
[プロジェクト]->[プロパティ]
[構成プロパティ]->[C/C++]->[コード生成]
[ランタイムライブラリ]の項目を
[マルチスレッドDLL(/MD)]や[マルチスレッドデバッグDLL(/MDd)]から
[マルチスレッド(/MT)]や[マルチスレッドデバッグ(/MTd)]に変更。
Re: 有効なWin32アプリではない
へにっくす さんありがとうございます。
>>ここからダウンロードしたのですよね。
>>Visual Studio 2013 の Visual C++ 再頒布可能パッケージ
>>これには、arm/x86/x64の3つのバージョンがありますが、どれをダウンロードしましたか。
>>Windows XPと言っても32bit/64bit両方あるので気を付けてください。
そうです。
この点は大丈夫です。 arm はDLしてないのですが、それぞれファイルの名前が異なるからです。
MSVCP120.dll と MSVCS120.dllのようにです。
Windows 7 x64 には、x86とx64の両方のDLLを入れる必要があります。
なぜなら、x64のOSでもx86のソフトを動かすときにはx86のDLLが必要となるからです。
>>ここからダウンロードしたのですよね。
>>Visual Studio 2013 の Visual C++ 再頒布可能パッケージ
>>これには、arm/x86/x64の3つのバージョンがありますが、どれをダウンロードしましたか。
>>Windows XPと言っても32bit/64bit両方あるので気を付けてください。
そうです。
この点は大丈夫です。 arm はDLしてないのですが、それぞれファイルの名前が異なるからです。
MSVCP120.dll と MSVCS120.dllのようにです。
Windows 7 x64 には、x86とx64の両方のDLLを入れる必要があります。
なぜなら、x64のOSでもx86のソフトを動かすときにはx86のDLLが必要となるからです。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 有効なWin32アプリではない
フォーラムルールを守ってくださることを期待します。
http://dixq.net/board/board.html
http://dixq.net/board/board.html
4. 義務行為
[C言語何でも質問掲示板でのみ適用される事項]
・トピックを立て、解決した場合は「解決しました」とだけ書かず、どうやって解決したか他の人に分かるように書いて からトピックを終了して下さい。
・複数の回答者がいた場合、都合の良い、または自分の気が向いた回答者にだけ返信を書かず、回答をくれた人 全員に対して出来る限りの返信を書きましょう。
・回答者のコメントの中に複数質問があった場合、出来る限りその全てに答えるようにしましょう。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 有効なWin32アプリではない
>>MSVCP120.dllを必要としない実行ファイルを生成する設定にすれば再配布パッケージのインストールは必要なくなりますよ。
ru-puさん回答たいへんありがとうございました。
そのとおりでした。
C/C++->コード生成ー>ランタイムライブラリの設定を
1.マルチスレッド(/MT)
2.マルチスレッドデバッグ(/MTd)
3.マルチスレッドDLL(/MD)
4.マルチスレッドデバッグDLL(/MDd)
のうち1.にしたところうまく WinXp でも実行できるようになりました。
1.と2.がexeにDLLを含む設定
3.と4 が,exeにDLLを含まず、外部のDLLを使う設定
のようですね。
プログラミングもむずかしいですが、私には、IDEの設定も複雑でわかりにくく
むずかしいので大変です。
これで解決しました。
たいへんありがとう御座いました。
ru-puさん回答たいへんありがとうございました。
そのとおりでした。
C/C++->コード生成ー>ランタイムライブラリの設定を
1.マルチスレッド(/MT)
2.マルチスレッドデバッグ(/MTd)
3.マルチスレッドDLL(/MD)
4.マルチスレッドデバッグDLL(/MDd)
のうち1.にしたところうまく WinXp でも実行できるようになりました。
1.と2.がexeにDLLを含む設定
3.と4 が,exeにDLLを含まず、外部のDLLを使う設定
のようですね。
プログラミングもむずかしいですが、私には、IDEの設定も複雑でわかりにくく
むずかしいので大変です。
これで解決しました。
たいへんありがとう御座いました。
Re: 有効なWin32アプリではない
>>わざわざ変なことをして使うよりは、
>>VisualC++2008を使うとかMinGWを使うとかの
>>選択肢もあるのですがダメなのでしょうか?
ダメじゃありません。 実際にそれらも使っています。
>>Visual Studio 2013 じゃないといけない理由を教えて下さい。
VS2013じゃないといけない理由はありません。
こちらで質問をして教えていただいたおかげさまで
VS2013でもWinXP用のコンソールアプリを作ることが
できることがわかりました。
>>VisualC++2008を使うとかMinGWを使うとかの
>>選択肢もあるのですがダメなのでしょうか?
ダメじゃありません。 実際にそれらも使っています。
>>Visual Studio 2013 じゃないといけない理由を教えて下さい。
VS2013じゃないといけない理由はありません。
こちらで質問をして教えていただいたおかげさまで
VS2013でもWinXP用のコンソールアプリを作ることが
できることがわかりました。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 有効なWin32アプリではない
dllとOSが不整合を起こさない保証は誰にも取れませんよ。それで良かったら使ってもよいでしょうけど。
無理矢理であることは忘れないで下さい。
無理矢理であることは忘れないで下さい。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。