TL;DRによって生成されたすべてのレジストリ エントリregsvr32
は、SxS reg-free-COM マニフェストに存在する必要がありますか? またその逆も同様ですか?
サードパーティ コンポーネント用に登録不要の COM を取得しようとしています。
この件について読んでみると、マニフェストに入れることができるいくつかの要素が言及されていることがわかりました。
docs から、次のタグをマニフェストに追加して、COM コンポーネントを記述することができます。
assemblyIdentity
-私が知る限り、これは本当に「抽象的なアセンブリ」を説明しているだけですcomClass
- COM クラス (IID インターフェイス) について説明します。どうやら、これは常に必要です。typelib
- いつ?comInterfaceExternalProxyStub
- いつ?comInterfaceProxyStub
- いつ?
他のドキュメントからHKEY_LOCAL_MACHINE\SOFTWARE\Classes
、COM レジストリ エントリにはいくつかのカテゴリがあることがわかります。
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{CLSID}
おおよそ対応すると思いますcomClass
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{IID}
どちら にも対応しますcomInterface[External]ProxyStub
が、どちら(または両方)をいつ使用するかはまったくわかりません- マニフェストエントリに対応するレジストリ エントリはどれ
typelib
ですか??
regsvr42を使用して、regfree しようとしている dll のものを抽出すると、エントリのみを含みcomClass
、typelib または ProxyStub エントリを含まないマニフェストが生成されます。(そして、書き込まれたキー、問題の DLL をクロス チェックしましたpdm.dll
。MS の Process Debug Manager はそれらのキーのみを書き込みます。つまり、レジストリにタイプ ライブラリまたはプロキシ スタブ情報はありません。)
レジストリに関連する情報のみが含まれている場合、comClass
この情報は SxS マニフェストで十分であることを意味しますか、それともマニフェストで追加情報が必要になる可能性がありますか?
余談ですが、レジストリには、末尾にバージョン番号が追加されたaVersionIndependentProgId
と aが含まれていることに気付きました。ProgId
マニフェストにはProgId
エントリのみがあり、ドキュメントには次のように記載されています。
progid : COM コンポーネントに関連付けられた、バージョンに依存するプログラム識別子。ProgID の形式は
<vendor>.<component>.<version>
.
しかし、ドキュメントにも記載されています
comClass要素は、バージョンに依存する progid をリストする要素を子として持つことができます。
<progid>...</progid>
彼らは、progid 属性はバージョンに依存しないものであるべきだと言っています。
では、ここに何を入れますか?また、クライアントが特定のバージョンを要求していない場合でも問題になるでしょうか?