Практическое руководство. Настройка COM-компонентов на основе платформы .NET Framework для активации без регистрации

Активация компонентов на основе платформы .NET Framework без регистрации осуществляется лишь немного сложнее, чем для COM-компонентов. При установке требуются два манифеста:

  • Для определения управляемого компонента в COM-приложениях используется манифест приложения в стиле Win32.

  • Компоненты на основе платформы .NET Framework используют манифест компонента для получения необходимых для активации сведений во время выполнения.

В этом разделе описывается, как связать манифест приложения с приложением, манифест компонента с компонентом и внедрить манифест компонента в сборку.

Создание манифеста приложения

  1. С помощью редактора XML создайте (или измените) манифест приложения, принадлежащий COM-приложению, которое взаимодействует с одним или несколькими управляемыми компонентами.

  2. Вставьте следующий стандартный заголовок в начало файла:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    </assembly>
    

    Дополнительные сведения об элементах манифеста и их атрибутах см. в статье Application Manifests (Манифесты приложений).

  3. Определите владельца манифеста. В следующем примере владельцем файла манифеста является myComApp версии 1.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
      <assemblyIdentity type="win32"
                        name="myOrganization.myDivision.myComApp"
                        version="1.0.0.0"
                        processorArchitecture="msil"
      />
    </assembly>
    
  4. Определите зависимые сборки. В следующем примере myComApp зависит от myManagedComp.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
      <assemblyIdentity type="win32"
                        name="myOrganization.myDivision.myComApp"
                        version="1.0.0.0"
                        processorArchitecture="x86"
                        publicKeyToken="8275b28176rcbbef"
      />
      <dependency>
        <dependentAssembly>
          <assemblyIdentity type="win32"
                        name="myOrganization.myDivision.myManagedComp"
                        version="6.0.0.0"
                        processorArchitecture="X86"
                        publicKeyToken="8275b28176rcbbef"
          />
        </dependentAssembly>
      </dependency>
    </assembly>
    
  5. Сохраните файл манифеста под соответствующим именем. Имя манифеста приложения состоит из имени исполняемого файла сборки и расширения manifest. Например, для приложения myComApp.exe файл манифеста будет носить имя myComApp.exe.manifest.

Манифест приложения можно установить в тот же каталог, что и COM-приложение. Также его можно добавить в качестве ресурса в EXE-файл приложения. Дополнительные сведения см. в разделе О параллельных сборках.

Создание манифеста компонента

  1. С помощью редактора XML создайте манифест компонента, описывающий управляемую сборку.

  2. Вставьте следующий стандартный заголовок в начало файла:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    </assembly>
    
  3. Определите владельца файла. Элемент <assemblyIdentity> элемента <dependentAssembly> в файле манифеста приложения должен соответствовать аналогичному элементу в манифесте компонента. В следующем примере владельцем файла манифеста является myManagedComp версии 1.2.3.4.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
           <assemblyIdentity
                        name="myOrganization.myDivision.myManagedComp"
                        version="1.2.3.4"
                        publicKeyToken="8275b28176rcbbef"
                        processorArchitecture="msil"
           />
    </assembly>
    
  4. Определите каждый класс в сборке. Используйте <clrClass> элемент для уникальной идентификации каждого класса в управляемой сборке. Атрибуты элемента, вложенного в <assembly>, определены в следующей таблице.

    Атрибут Description Обязательное поле
    clsid Идентификатор, который задает активируемый класс. Да
    description Строка, которая сообщает пользователю о компоненте. По умолчанию используется пустая строка. No
    name Строка, представляющая управляемый класс. Да
    progid Идентификатор, который используется для отложенной активации. No
    threadingModel Потоковая модель COM. По умолчанию используется значение "Both" (Оба). No
    runtimeVersion Используемая версия среды CLR. Если этот атрибут не задан, а среда CLR еще не загружена, компонент загружает последнюю установленную версию среды CLR, предшествующую версии 4. Если указать v1.0.3705, v1.1.4322 или v2.0.50727, автоматически выполняется накат версии до последней установленной версии среды CLR, предшествующей версии 4 (как правило, v2.0.50727). Если уже загружена другая версия среды CLR и не удается загрузить указанную версию в рамках параллельного процесса, загружается указанная версия. В противном случае используется загруженная версия CLR. Это может привести к сбою загрузки. No
    tlbid Идентификатор библиотеки типов, содержащей сведения о типе класса. No

    Во всех тегах атрибутов учитывается регистр символов. Просматривая библиотеку типов, экспортированную для сборки с помощью средства ObjectViewer OLE/COM (Oleview.exe), можно получить идентификаторы классов (CLSID), программ (ProgID), потоковые модели и версию среды выполнения.

    В следующем манифесте компонента определяются два класса: testClass1 и testClass2.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
           <assemblyIdentity
                        name="myOrganization.myDivision.myManagedComp"
                        version="1.2.3.4"
                        publicKeyToken="8275b28176rcbbef"
           />
           <clrClass
                        clsid="{65722BE6-3449-4628-ABD3-74B6864F9739}"
                        progid="myManagedComp.testClass1"
                        threadingModel="Both"
                        name="myManagedComp.testClass1"
                        runtimeVersion="v1.0.3705">
           </clrClass>
           <clrClass
                        clsid="{367221D6-3559-3328-ABD3-45B6825F9732}"
                        progid="myManagedComp.testClass2"
                        threadingModel="Both"
                        name="myManagedComp.testClass2"
                        runtimeVersion="v1.0.3705">
           </clrClass>
           <file name="MyManagedComp.dll">
           </file>
    </assembly>
    
  5. Сохраните файл манифеста под соответствующим именем. Имя манифеста компонента состоит из имени библиотеки сборки и расширения manifest. Например, манифест для myManagedComp.dll будет носить имя myManagedComp.manifest.

Манифест компонента необходимо внедрить в сборку в качестве ресурса.

Внедрение манифеста компонента в управляемую сборку

  1. Создайте скрипт ресурсов, содержащий следующую инструкцию:

    1 RT_MANIFEST myManagedComp.manifest

    В этой инструкции myManagedComp.manifest определяет имя внедряемого манифеста компонента. В этом примере файл скрипта будет носить имя myresource.rc.

  2. Скомпилируйте скрипт с помощью средства компиляции ресурсов Microsoft Windows (Rc.exe). В командной строке введите следующую команду:

    rc myresource.rc

    Программа Rc.exe создает файл ресурсов myresource.res.

  3. Снова скомпилируйте исходный файл сборки и укажите файл ресурсов с помощью параметра /win32res:

    /win32res:myresource.res

    Файл, содержащий внедренные ресурсы, также носит имя myresource.res.

См. также