Бөлісу құралы:


Как настроить 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>
    

    Сведения о элементах манифеста и их атрибутах см. в разделе "Манифесты приложения".

  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 Строка, которая сообщает пользователю о компоненте. Пустая строка по умолчанию. нет
    name Строка, представляющая управляемый класс. Да
    progid Идентификатор, используемый для активации с поздней привязкой. нет
    threadingModel Модель потоков COM. "Оба" — это значение по умолчанию. нет
    runtimeVersion Указывает версию общеязыковой среды выполнения (CLR). Если этот атрибут не указан, а среда CLR еще не загружена, компонент загружается с последней установленной средой CLR до среды CLR версии 4. Если указать версию 1.0.3705, 1.1.4322 или 2.0.50727, она автоматически обновляется до последней установленной версии CLR перед версией 4 CLR (обычно 2.0.50727). Если другая версия среды CLR уже загружена, и указанная версия может быть загружена параллельно в процессе, указанная версия загружается; в противном случае используется загруженная среда CLR. Это может привести к сбою загрузки. нет
    tlbid Идентификатор библиотеки типов, содержащей сведения о типе класса. нет

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

    Следующий манифест компонента определяет два класса 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 это имя файла ресурса, содержащего внедренные ресурсы.

См. также