2009-06-04 5 views
1

Visual Studio 2008 SP1では、vcredist 2008 SP1の代わりにvcredist 2008にC++ COMプロジェクトを対象とすることは可能ですか?vcredistの特定のバージョンを使用しますか?

お客様にはvcredist 2008がインストールされており、vcredist 2008 SP1をインストールする必要はありません。 (数千台のコンピュータ!)

答えて

2
  1. あなたは埋め込みマニフェストを削除しようとすることができます(プロジェクト設定マニフェストツール下に見える)と、前のSP1 CRuntimeのバージョンを対象とするアプリケーションのために、独自のマニフェストを提供しています。
  2. また、Cランタイムをx86/x64のredistフォルダに配置すると、Cランタイム(Microsoft.VC90.CRT)のフォルダがexeファイルと同じフォルダにコピーされます。
  3. 静的なCランタイムオプションを使用すると、静的なlibとしてCランタイムが使用されます。これはdll/exeがあまりない場合に便利です。
+0

私は提案を試してみましたターゲット前SP1: Dependency Walkerはまだそれは9.0.30729.1(SP1)バージョンのファイルに依存していますか? –

+0

+1の提案#3。これは、Cランタイムが実際に実行可能ファイルにコンパイルされることを意味します。これはexeを少し大きくしますが、vcredistの必要性を排除します。また、サイズが気になる場合は、PGOを使用して、めったに使用されないコードをexeの後部座席にプッシュすることができます。 – eran

+0

静的ライブラリを使用すると問題が解決しました –

3

実際には、VS2008はデフォルトでVS9 RTMの再配信をターゲットにし続けます。 依存関係チェッカーでは、VS9 SP1をインストールすると、RTM再配布可能ファイルをSP1再配布可能ファイルに読み込む試みをリダイレクトするポリシーファイルもインストールされます。

はVS9 SP1が実際にあなたのプロジェクトの設定やプリコンパイルヘッダに次のマクロを追加する必要がありますSP1のランタイムを必要とするために得るために:作成のマニフェストはすでにそれのように見える1.

#define _BIND_TO_CURRENT_CRT_VERSION 1 
+0

私には、2つのバージョンのMicrosoft.VC90.CRTがマニフェストファイル内で参照されるという影響があります。 –

+0

これは、プロジェクトが異なるプロジェクトの一部として構築されているファイルで構成されている場合に発生します。あらかじめビルドされた静的ライブラリを使用していますか?あるいは、プロジェクトに依存することもあります。すべての静的ライブラリは#defineで再構築する必要があり、すべてのオブジェクトファイルに全く同じcrt依存関係情報が含まれるようにする必要があります。 –

関連する問題