Поделиться через


Разделы реестра, зависящие от версии

Большинство управляемых сборок, чтобы они могли использоваться моделью COM, должны быть зарегистрированы в реестре Windows. На сборки, использующие COM-взаимодействие без регистрации это требование не распространяется.

Сборку можно зарегистрировать с помощью программы регистрации сборок (Regasm.exe) или методов, предоставляемых классом RegistrationServices. Каждый из этих механизмов создает зависящие от версии разделы реестра, которые позволяют нескольким версиям одной и той же сборки одновременно работать на одном компьютере.

В этом разделе описывается процедура добавления и удаления программой Regasm.exe записей реестра, обеспечивающих работу COM. Если разработчик создает собственную программу установки, этот раздел может помочь разобраться в требованиях к регистрации параллельного выполнения для COM-взаимодействия.

Структура реестра для разделов реестра, зависящих от версии

При первой регистрации сборки программа Regasm.exe создает набор разделов верхнего уровня для каждого класса сборки и добавляет подраздел низшего уровня в раздел HKEY CLASSES\ROOT\CLSID\{}\InprocServer32, чтобы уникальным образом определить версию сборки. В следующей структуре реестра представлен подраздел для className версии 1.0.0.0.

CLSID\{}
@="namespaceName.className"
CLSID\{}\InprocServer32
@="mscoree.dll"
ThreadingModel = "Both" 
Class="namespaceName.className"
Assembly="name, Version=2.0.0.0, Culture=neutral, PublicKeyToken="
RuntimeVersion="v1.0.3705"
1.0.0.0
   Class="namespaceName.className"
   Assembly="name, Version=1.0.0.0, Culture=neutral, PublicKeyToken="
          RuntimeVersion="v1.0.3705"
CLSID\{}\ProgId
@="namespaceName.className"
CLSID\{}\ImplementedCategories\{guid}

По мере регистрации последующих версий сборки программа Regasm.exe будет добавлять для каждой новой версии зависящий от версии подраздел. Для всех версий одной и той же сборки создается единый набор разделов верхнего уровня (он показан в предыдущей структуре реестра). В следующем отрывке структуры показаны подразделы 1.0.0.0 и 2.0.0.0 одной и той же сборки.

1.0.0.0
   Class="namespaceName.className"
   Assembly="name, Version=1.0.0.0, Culture=neutral, PublicKeyToken="
          RuntimeVersion="v1.0.3705"
2.0.0.0
   Class="namespaceName.className"
   Assembly="name, Version=2.0.0.0, Culture=neutral, PublicKeyToken="
          RuntimeVersion="v1.1.5000"

Удаление разделов реестра, зависящих от версии

При удалении версии сборки программа Regasm.exe удаляет только зависящий от версии подраздел. Например, при удалении className версии 1.0.0.0 программа Regasm.exe удаляет ключ низшего уровня 1.0.0.0, но оставляет все разделы верхнего уровня и подраздел 2.0.0.0.

CLSID\{}
   @="namespaceName.className"
CLSID\{}\InprocServer32
   @="mscoree.dll"
ThreadingModel = "Both" 
Class="namespaceName.className"
Assembly="name, Version=2.0.0.0, Culture=neutral, PublicKeyToken="
RuntimeVersion="v1.0.3705"
Version
2.0.0.0
   Class="namespaceName.className"
   Assembly="name, Version=2.0.0.0, Culture=neutral, PublicKeyToken="
          RuntimeVersion="v1.1.5500"
CLSID\{}\ProgId
   @="namespaceName.className"
CLSID\{}\ImplementedCategories\{guid}

При удалении последней версии сборки программа Regasm.exe удаляет все зависящие от версии подразделы. Кроме того, она удаляет из реестра разделы верхнего уровня, связанные со сборкой.

См. также

Основные понятия

Инициализация среды выполнения из COM-приложения

Настройка COM-приложения для параллельного выполнения

Применение атрибутов, зависящих от версии

COM-компоненты и параллельное выполнение

Другие ресурсы

Параллельное выполнение для COM- взаимодействия