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 должен быть независимым от версии.
Итак, что здесь поставить? И действительно ли имеет значение, когда клиент не запрашивает определенную версию?