1

Visual Studio 2008の展開(セットアップ)プロジェクトを使用してインストーラーを構築しています。プロジェクトには、管理者のみが実行できるように「特権」の起動条件があります。サードパーティが提供するマージモジュールを使用して、COMコンポーネントを登録します。COMコンポーネントは、.NET相互運用機能DLLを介して公開されます。このDLLは、インストーラーを構築しているプログラムによって使用されます。(詳細:これは、QBFCフレームワークをインストールするIntuitマージモジュールです)。

インストールが完了すると、COMコンポーネントをロードできなくなります。エラーは「クラスが登録されていません」です。しかし、レジストリにアクセスすると、正しいエントリがすべて下にあることがわかりますHKEY_CLASSES_ROOT\CLSID\{the class id}。ここで、クラスIDはエラーメッセージのクラスIDと一致します。次に、管理者モードでコマンドプロンプトを開き、Regsvr32を使用してCOMサーバーのDLLを再登録すると、すべてが修正されますが、KEY_CLASSES_ROOT\CLSID

クラスが登録されていないというエラーが発生しているときにプロセスモニターを使用してシステムを調べると、CLSIDが確実に存在しているにもかかわらず、アプリケーションがCLSIDを開こうとすると「名前が見つかりません」というエラーが発生していることがわかります(Iダブルチェックとトリプルチェックがあります)。これは許可と関係があるに違いないと思います。別の理論では、「クラスが登録されていません」というメッセージが依存コンポーネントから送信されている可能性がありますが、これではプロセスモニターに表示されている内容を説明できません。

これらのテスト結果はすべて、Windows 7Ultimate32ビットオペレーティングシステムからのものです。

この問題の根底に到達するためにどのような手順を実行しますか?

4

1 に答える 1

2

それが考えられることの1つは、コンポーネントカテゴリキャッシュの問題です。長い道のりですが、インストールにステップを追加して下のキーを削除すると、HKEY_CLASSES_ROOT\Component Categories\役に立ちますか?その場合、削除する必要のあるcomcatキャッシュ(つまり、オブジェクトが使用しているキャッシュ)を把握する必要があります。

他にできることは、レジストリ全体をエクスポートし、インストールを実行し、レジストリをエクスポートし、zippy32を実行し、レジストリをエクスポートすることです。次に、エクスポートされたレジストリファイルの各リビジョンをwindiffします。それは、少なくとも何が変わったかについての考えをあなたに与えるかもしれません。

最後に、64ビットマシンの場合は、64ビット登録を正しく行っていることを確認してください。

于 2011-07-09T00:56:56.720 に答える