私は、Visual Studio 2008の展開(セットアップ)プロジェクトを使用してインストーラを構築しています。このプロジェクトには、管理者だけが実行できるように、起動条件「特権」があります。第三者が提供するマージモジュールを使用してCOMコンポーネントを登録します。 COMコンポーネントは、.NETインターオペラDLLを介して公開されます。このDLLは、インストーラをビルドしているプログラムによって使用されます。 (具体的には、これはQBFCフレームワークをインストールするIntuitマージモジュールです)。COMコンポーネントはどのように途中で登録できますか?
インストールが完了すると、COMコンポーネントをロードできません。エラーは「クラスが登録されていません」です。しかし、レジストリに行くと、正しいエントリがすべてHKEY_CLASSES_ROOT\CLSID\{the class id}
の下にあることがわかります。クラスIDはエラーメッセージのクラスIDと一致します。管理モードでコマンドプロンプトを開き、Regsvr32を使用しているCOMサーバーをDLLに再登録すると、すべてが修正されますが、変更は表示されません。KEY_CLASSES_ROOT\CLSID
プロセスモニターを使用してシステムを調べるとクラスが登録されていないエラーを取得している場合、CLSIDが確実に存在するにもかかわらず、CLSIDをオープンしようとするとアプリケーションに「名前が見つかりません」というエラーが表示されていることがわかります。私はこれがパーミッションと関係があると思っています。別の理論では、おそらく「登録されていないクラス」メッセージが従属コンポーネントから来ている可能性がありますが、これはプロセスモニタで見ていることを説明していません。
これらのテスト結果は、すべてWindows 7 Ultimate 32ビットオペレーティングシステムからのものです。
この問題の最下部に進むにはどのような手順が必要ですか?
HKLM \ Software \ Wow6432Node \ Classes \ CLSIDにあります。 32ビットCOM登録キーのホーム。 –
ハンス、それは良いキャッチですが、私は私のテスト結果が32ビットイメージからのものだと言及するのを忘れていました。 –
"32ビットイメージ"が32ビットCOMサーバーを意味する場合は、間違いなくWow6432Nodeを見たいと思っています。これを64ビットオペレーティングシステムで実行するかどうかなどの重要な詳細を推測しないようにしてください。 –