1

CRT と MFC の両方のマージ モジュールを使用してインストールする VS2008 で ActiveX コントロール インストーラーを構築しています。コントロールが Windows 7 に登録しようとすると失敗します。

Dependency Walker は、コントロールを登録しようとすると、mfc90u.dll、msvcr90.dll、および msvcp90.dll の依存関係が見つからないと言い、インストールに失敗します。マージモジュールはこれを処理することになっていますか? 私の出力 OCX は vsdrpCOMSelfReg オプションで登録されています。私が他のフォーラムで読んでいることから、これは最善の方法ではないかもしれません。この時点で何を試すべきですか?

インストールは Windows XP で問題なく動作します。

2010 年 4 月 8 日更新:

vsdrpCOM に変更すると、インストールは成功しますが (驚くことではありません)、その後 msvcr90.dll が見つかりません。これは CRT のマージ モジュール (microsoft_vc90_crt_x86.msm) によって処理されると思いましたか? Windows XP では、Dependency Walker は、予想どおり SxS フォルダーではなく、Windows/System32 でそれを見つけます。Windows 7 では、まったく検出されません。msvcr90.dll を自分で Windows/System32 に入れる必要がありますか? それはそうではないようです。

2010 年 4 月 20 日更新:

msvcp90.dll と mfc90u.dll はどちらも msvcr90.dll に暗黙的/転送された依存関係を持ち、それらは依存ウォーカー。ただし、コントロールは正常に登録され、それらのライブラリのロードを実行します。これは無視できるものですか?

4

1 に答える 1

1

必要な 2 つのモジュールは次のとおりです。 - Microsoft_VC90_MFC_x86.msm - Microsoft_VC90_CRT_x86.msm

64 ビット アプリの場合は、Microsoft_VC90_MFC_x86_64.msm - Microsoft_VC90_CRT_x86_64.msm を使用する必要があります。

残念ながら、自己登録は多くの問題を引き起こします。必要なレジストリ エントリをセットアップ プロジェクトに手動で追加する必要があります。( WiXの「heat」ツールを使用すると、この情報を取得するための非常に簡単な方法が提供されますが、DLL を作成した場合は、必要なエントリを既に知っている必要があります)。自己登録の本当の問題は、失敗するとセットアップが停止することです。最も明白な問題は、DLL が自己登録を正常に完了するために追加のモジュールを必要とし、それらが同時にインストールされている場合、自己登録を完了するためにそれらが存在することをシステムが検出することを保証できないことです。

于 2010-04-08T04:15:01.337 に答える