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ビットオペレーティングシステムからのものです。
この問題の根底に到達するためにどのような手順を実行しますか?