7

私はアプリケーション パッケージャーであり、COM レジストリ キー (SelfReg) が Windows の特定の .dll とどのように相互関係しているかを理解しようとしています。

ProgID、AppID、TypeLib、拡張機能、動詞はすべて CLSID に関連付けられていますか? CLSID は常に Prog/App ID を使用しますか?それともファイル拡張子クラスだけを使用できますか? オプションのビットはどれですか?

その一部は、2 つのインターフェイス (内部 - .dll) と外部 (拡張子など) がある「ルーターのようなもの」のようです。

これはどのように適合しますか?(SDKのドキュメントは私には意味がありません)

これはすべて、Windows インストーラーを使用したアプリケーションの「修復」にとって極めて重要であるため、質問します (パッケージャーはすべて「大きく」なっていますが、実際にはコーダーのものであるため、本質的な故障はありません)。

---編集: COM が登録されているものはすべて CLSID にリンクする必要があり、「行き止まり」になることはないと想定しても安全ですか? 動詞には、progid を必要とする拡張機能が必要です...

AppId、TypeLib、インターフェイスはどうですか? それらはどのように相互に関係していますか?

4

3 に答える 3

5

最初に気付くのは、COM dll が自分自身を登録するということです。必要なすべてのエントリがレジストリの正しい場所に配置されます。

どのビットがオプションであるかについての中心的な質問に対する答えは、おそらく、さまざまな種類のオブジェクトに対してすべてオプションであるということだと思います。オートメーション オブジェクトは、パブリックに作成できる場合は Prog/AppID を必要としますが、内部でのみ作成される場合は必要ない場合があります。同様に、パブリックに作成できない COM クラスをリストすることもできます。

自動化インターフェイスを持たない多くの COM オブジェクト (Microsoft が Windows で内部的に使用する COM クラスの多くなど) には ProgId はなく、単に HKCR\CLSID の CLSID の下にエントリがあります。

あなたが正しく理解しているなら、あなたはインストーラーの観点からこれに興味を持っています。自己登録しているdllを指定してから呼び出すようにユーザーに依頼するだけでよいと思います

regsvr32 dllname.dll

また

exename.exe /Regserver

アウト プロセス サーバーの場合。何か問題が発生した場合は、反対側に電話するだけです。

regsvr32 /u dllname.dll

また

exename.exe /Unregserver

これがあなたの質問に答えることを願っています。

于 2008-10-17T09:59:41.920 に答える
2

InsideCOMという本をお勧めします。

これは、COMの全盛期でも最新のリファレンスではありませんでしたが、すべてのレジストリgooを含め、基本を非常によく説明しています。さらに、中古のコピーを本当に安く手に入れることができるに違いありません。

私はこれが答えではないことを知っていますが、レジストリに関する章がどのように見えたかを思い出してください-非特定の「それはどのように機能するか」の質問は本当に、本当に長い答えを必要とします...

于 2008-10-17T22:41:18.997 に答える
0

コメントが非常に限られているように見えるため、回答を使用しました。SOがこれをどのように解釈するかはわかりません(独り言を言うと怒っていると思われるかもしれませんか?)

「どのように機能するのか」という質問には、非常に長い答えが必要になります

ありがとう-私が達成しようとしているのは、実際に開発者でなくてもそれを理解することです-これは、アプリケーションの回復力が機能するように、パッケージャーが COM レジストリ キーを (同じコンポーネント内の) .dll とグループ化しようとする方法によるものです。

これは、COM を .dll の登録から「トラップ」し、それを正しいアドバタイジング テーブル (CLSID、AppID ... ad nauseum ) で .dll を保持するコンポーネントに関連付けることを意味します。これは簡単に確認できない場合もあれば、アプリが機能しなくなる場合もあります (私は聞いています)。COM は完全である必要はないと言われています (自己参照)。

私はまだそれをすべて理解しようとしています。もちろん、パッケージャーがすべての情報を取得しても、COM 情報を .dll に関連付けていない場合でも、regkey はインストール時に書き込まれます。問題が発生した場合に MSI がアプリケーションを子守することはありません (これはほとんどありません)

于 2008-10-18T00:19:46.130 に答える