7

展開用にパッケージ化しようとしている MFC アプリケーションがあります。ファイル「msvcr90.dll」、「msvcp90.dll」、「mfc90.dll」に依存しているようです。これらのファイルを配布する正しい方法は何ですか?

インストーラーがマージ モジュールをサポートしていないため、マージ モジュールを使用できません。VCRedist_x86.exe を実行できることはわかっていますが、さまざまな理由から実行したくありません。

私の唯一の代替手段は、ファイルを Private Side-by-Side アセンブリとしてインストールすることです。これは正しいです?

http://msdn.microsoft.com/en-us/library/ms235317(VS.80).aspxによると、プライベート アセンブリをインストールする正しい方法は、「Microsoft.VC90.CRT」と「Microsoft.VC90」をコピーすることです。 .MFC' フォルダーを実行可能ファイルと同じフォルダーに移動します。これは問題を解決する正しい方法ですか? 動作しますが、この方法でシステム ファイルをコピーするのは 1990 年代のようです。これを行う別のアプリケーション (または少なくともデモ プロジェクト) の例を誰かに見せてもらえますか?

最後に、アプリケーションの .manifest ファイルの配布について心配する必要があるのはいつですか? XML ファイルを明示的にインストールする必要がありますか、それとも何らかの形で実行可能ファイルに埋め込まれていますか?

4

3 に答える 3

1

通常、「クリーンな方法」であるため、ターゲットマシンに必要な再配布可能ファイルをインストールする必要があると言えます。しかし、90 年代スタイルにすることもできます。アプリケーションのビルドに使用している CRT/MFC ライブラリに大きく依存します。これは、マニフェスト ファイル内で調べることができます。アプリケーションを指定した lib に強制的にバインドすることもできます。何も定義しないと、VS2008 は通常 9.0.21022.8 をバインドします。

#define _BIND_TO_CURRENT_VCLIBS_VERSION 1

最新のライブラリが取得されます。指定したバージョンでバインドすることもできます:

#define _CRT_ASSEMBLY_VERSION "9.0.30729.1"

および/または

#define _MFC_ASSEMBLY_VERSION "9.0.30729.1"

したがって、90 年代のスタイルで実行する場合は、ファイルをコピーして、C:\Windows\Winsxs\バインドしたフォルダーから DLL を取得します。たとえばamd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.1_none_99b61f5e8371c1d4、x64 アプリケーションに CRT を使用する場合、またはx86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.1_none_99b61f5e8371c1dx86 バージョンの CRT に相当するものを使用する場合です。

于 2010-02-03T13:43:40.703 に答える
1

現在のパスが最初に検索される場所であるため、これらの dll を exe と一緒に配置するだけで十分だと思います。

もちろん、再配布可能ファイルをインストールするように努力する必要があります。それがより安全な方法です。

于 2010-02-03T16:16:36.227 に答える
1

MFC と CRT の両方に静的にリンクすることも検討できます。その場合は、EXE ファイルのみを出荷する必要があります。ただし、これには長所と短所があります。

于 2010-02-03T14:25:58.583 に答える