30

Visual Studio 11DeveloperPreviewを使用してC++ソースコードをコンパイルします。ランタイムライブラリに静的にリンクします。

結果の実行可能ファイルは、WindowsXPでは実行できません。Windows XPで実行しようとすると、「[実行可能パス]は有効なWin32アプリケーションではありません。」というエラーメッセージが表示されます。

Microsoft Visual Studio 11によると、 WindowsXPはサポートされません。

結果の実行可能ファイルをWindowsXPで実行できないようにするには、どのように機能しますか?実行可能ファイル内に何か特別なものはありますか?

4

4 に答える 4

21

VSの新しいリリース(NT4、2000、 XP )ごとに、古いシステムのサポートが終了するようです。CRTをまったく使用しない場合でも、PEサブシステムのバージョンを強制的に高くします。ビルド後のステップで数値を5.0に戻すことで、これを回避できます。新しいCRTがXPに存在しないWinAPI関数を使用していない限り、これらの数値を変更するだけで、exeはXPで起動できるはずです。

VS11を使い続けたい場合の別の方法は、マルチターゲティングおよび古いコンパイラを使用することです...

于 2011-10-09T10:25:22.830 に答える
8

Visual Studio 2012は、2012年後半にWindowsXPをターゲットにできるようになります。

VisualStudio2012でC++を使用してWindowsXPをターゲットにする

「この秋、Microsoftは、C++アプリケーションがWindowsXPをターゲットにできるようにするVisualStudio 2012の更新プログラムを提供します。この更新プログラムは、開発者がアプリケーションとDLLを作成できるように、Visual C ++ 2012コンパイラ、ランタイム、およびライブラリに必要な変更を加えます。 WindowsXP以降のバージョンとWindowsServer2003以降で動作します。」

編集:これは今起こっています(おい!)

于 2012-06-18T10:06:04.053 に答える
4

回避策はPlatform Toolset、異なるバージョンのCRTをリンクし、古いオペレーティングシステムと互換性のあるバイナリを生成する別のを使用することです。

詳細はこちらをご覧ください:VisualStudio2010コンパイラとライブラリを使用してVisualStudio11BetaでWindowsXPをターゲットにします

ツールセットを使用v90すると、Windows2000などの古いシステムでもバイナリを実行できます。

http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-69/7444.BlogPic.png

于 2012-06-18T10:16:46.013 に答える
1

EncodePointerVS 2010以降にバンドルされているランタイムライブラリは、実行可能ファイルに、WindowsXPにない2つの新しい関数をkernel32.dllからインポートするように強制しますDecodePointer。これらは、ソフトウェアの「セキュリティ」を強化するためのさらに別のばかげた素朴な試みに必要です。

VS 2010には、この問題を解決するVisualStudio2008のランタイムライブラリを使用するオプションがあります。VSの新しいバージョンにそのようなオプションがあるかどうかはわかりません。

于 2012-06-18T10:15:55.087 に答える