TL; DR Должны ли все записи реестра, созданные regsvr32
, присутствовать в манифесте reg-free-COM SxS и наоборот?
Я пытаюсь получить бесплатную регистрацию COM для стороннего компонента.
Чтение вверх on, я обнаружил, что есть несколько элементов, которые могут быть помещены в манифест:
Из документов мы можем добавить следующие теги в манифест для описания 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
, но я серьезно no clue, когда использовать который (или оба) - Какая запись regsitry соответствует записи манифеста
typelib
Используя regsvr42, чтобы извлечь материал, который dll, который я пытаюсь выполнить regfree, дает манифест, содержащий только записи comClass
нет записей typelib или ProxyStub. (И я перекрестно проверил написанные ключи, DLL, о которых идет речь, pdm.dll
, MS Process Debug Manager записывает только эти ключи, т.е. В реестре нет библиотеки типов или информации о прокси-прокси, видимой в реестре.)
Если реестр содержит только информацию, относящуюся к comClass
, значит ли это, что этой информации будет достаточно в манифесте SxS или может потребоваться дополнительная информация в манифесте?
В стороне я заметил, что в реестре есть VersionIndependentProgId
и ProgId
, у которых есть номер версии, добавленный в конце. В манифесте есть только запись ProgId
, а документы:
progid: программный идентификатор, зависящий от версии, связанный с COM. Формат ProgID - это
<vendor>.<component>.<version>
.
Но в документах также указано
Элемент comClass может иметь элементы
<progid>...</progid>
как дети, которые перечисляют версии, зависящие от версии.
и они говорят, что атрибут progid должен быть независимым от версии.
Итак, что здесь поставить? И действительно ли имеет значение, когда клиент не запрашивает определенную версию?