13

VC++プロジェクトをVisualStudio2003からVisualStudio2008 SP1(9.0.30729.4148)に移植しています。依存する外部ライブラリもVisualStudio2008SP1でコンパイルされます。

MainApp - Main application Compiled with VS SP1 9.0.30729.4148
ExtStaticLib1 - External static library compiled with VS  SP1 9.0.30729.4148
ExtDynamicDll1 - External DLL compiled with VS  SP1 9.0.30729.4148

メインアプリケーションには、次の2つの展開シナリオがあります。

  • ユーザー管理者権限を持つマシン:アプリケーションMainAppを使用する前に、VisualStudio再配布可能パッケージをインストールするための前提条件を設定することをお勧めします。これは、ユーザーが管理者権限を持っており、再配布可能なパッケージのインストールに問題がないため、うまく機能します。アプリケーションは、WinSxSフォルダー内のVCredistDLLに自動的にリンクします。
  • 管理者以外のユーザーがいるマシン:このシナリオには問題があります。ユーザーには管理者権限がありません。したがって、VS2008SP1再配布可能パッケージをインストールすることはできません。

これを解決するために、次のことを行っています。

  • MainAppターゲットをマクロ_BIND_TO_CURRENT_OPENMP_VERSION(MainAppのすべてのプロジェクト用)でコンパイルします。

  • VS2008SP1再配布可能DLLをプライベートアセンブリとして配布し、アプリケーションインストールディレクトリにコピーします。

質問:

  1. フラグ_BIND_TO_CURRENT_VCLIBS_VERSIONを使用することによる副作用はありますか(特に、VC再配布可能パッケージとプライベートVC再配布アセンブリの両方が一緒に存在する場合)?
  2. 外部ライブラリExtStaticLib1、ExtDynamicDll1をあまり制御できないため、マクロ_BIND_TO_CURRENT_OPENMP_VERSIONでコンパイルされません。しかし、それらはすでにVSSp1でコンパイルされています。この設定に問題はありますか?
  3. 新しいバージョンのVS再配布可能ファイル(9.0.30729.4248より新しいバージョン)が利用可能な場合、問題は発生しますか?

ありがとう。

4

2 に答える 2

2

BINDマクロの使用は避けます。あなたは遅かれ早かれトラブルに巻き込まれるでしょう。

VCランタイムdllをプライベートアセンブリとして配布したとしても、ユーザーが他のアプリでそれらをインストールしていないことを確認することはできません。

発生する問題の1つは、複数のc-runtimeバージョンを参照するマニフェストになってしまう可能性があることです。これに関する未解決の問題があります(参考:私も同じ問題を抱えていました!)。

したがって、c-runtimeの非常に特定のバージョンのみを使用し、最新の互換性のあるバージョンは使用しないように強制する理由がない場合は、それらの定義マクロを使用しないでください。

于 2011-07-28T18:34:04.640 に答える
1

あなたの質問への回答があるこのブログリソースを見つけました。「アップデート、パッチ、およびサービス パック」というセクションを参照して ください http://helgeklein.com/blog/2010/03/deploying-visual-c-runtime-files-as-private-assemblies/

于 2011-07-28T17:26:59.330 に答える