Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Развертывание устаревших COM-компонентов традиционно было сложной задачей. Компоненты должны быть глобально зарегистрированы и поэтому могут вызывать нежелательные побочные эффекты между перекрывающимися приложениями. Эта ситуация обычно не является проблемой в приложениях .NET Framework, так как компоненты полностью изолированы к приложению или совместимы параллельно. Visual Studio позволяет развертывать изолированные com-компоненты в операционной системе Windows.
ClickOnce предоставляет простой и безопасный механизм развертывания приложений .NET. Однако если приложения используют устаревшие com-компоненты, вам потребуется выполнить дополнительные действия по их развертыванию. В этом разделе описывается развертывание изолированных COM-компонентов и ссылки на нативные компоненты (например, из Visual Basic 6.0 или Visual C++).
Дополнительные сведения о развертывании изолированных com-компонентов см. в статье "Упрощение развертывания приложений с помощью ClickOnce" и Registration-Free COM.
COM без регистрации
Com без регистрации — это новая технология для развертывания и активации изолированных COM-компонентов. Он работает, помещая все сведения о типе компонента и сведения о регистрации, которые обычно устанавливаются в системный реестр в XML-файл, называемый манифестом, хранящимся в той же папке, что и приложение.
Для изоляции COM-компонента требуется, чтобы он был зарегистрирован на компьютере разработчика, но он не должен быть зарегистрирован на компьютере конечного пользователя. Чтобы изолировать COM-компонент, необходимо задать для его ссылки свойство Isolated в значение True. По умолчанию это свойство имеет значение False, указывающее, что оно должно рассматриваться как зарегистрированная ссылка COM. Если это свойство имеет значение True, он приводит к созданию манифеста для этого компонента во время сборки. Это также приводит к копированию соответствующих файлов в папку приложения во время установки.
При обнаружении изолированной ссылки COM генератор манифеста перечисляет все CoClass записи в библиотеке типов компонента, сопоставляя каждую запись с соответствующими данными регистрации и создавая определения манифеста для всех классов COM в файле библиотеки типов.
Развертывание компонентов COM без регистрации с помощью ClickOnce
Технология развертывания ClickOnce хорошо подходит для развертывания изолированных COM-компонентов, так как для развертывания как ClickOnce, так и без регистрации COM требуется наличие манифеста у компонента.
Как правило, автор компонента должен предоставить манифест. Однако в противном случае Visual Studio может автоматически создавать манифест для com-компонента. Создание манифеста выполняется во время процесса публикации ClickOnce; Дополнительные сведения см. в статье "Публикация приложений ClickOnce". Эта функция также позволяет использовать устаревшие компоненты, созданные в более ранних средах разработки, таких как Visual Basic 6.0.
Существует два способа развертывания COM-компонентов ClickOnce:
Используйте загрузчик для развертывания com-компонентов; это работает на всех поддерживаемых платформах.
Используйте изоляцию собственных компонентов (также называемую развертыванием COM без регистрации).
Пример изоляции и развертывания простого COM-компонента
Чтобы продемонстрировать развертывание com-компонентов без регистрации, в этом примере будет создано приложение на основе Windows в Visual Basic, которое ссылается на изолированный собственный COM-компонент, созданный с помощью Visual Basic 6.0, и развернет его с помощью ClickOnce.
Сначала необходимо создать собственный com-компонент:
Создание собственного COM-компонента
С помощью Visual Basic 6.0 в меню "Файл " нажмите кнопку "Создать", а затем " Проект".
В диалоговом окне "Новый проект" выберите узел Visual Basic и проект ActiveX DLL. В поле "Имя" введите
VB6Hello.Замечание
Поддерживаются только типы проектов ActiveX DLL и ActiveX без регистрации COM; типы проектов ActiveX EXE и ActiveX Document не поддерживаются.
В обозревателе решений дважды щелкните Class1.vb , чтобы открыть текстовый редактор.
В файле Class1.vb добавьте следующий код после автоматически созданного кода для метода
New.Public Sub SayHello() MsgBox "Message from the VB6Hello COM component" End SubСоздайте компонент. В меню "Сборка" щелкните "Создать решение".
Замечание
Com без регистрации поддерживает только библиотеки DLL и типы проектов элементов управления COM. Вы не можете использовать EXEs с бесплатной регистрацией COM.
Теперь вы можете создать приложение на основе Windows и добавить ссылку на com-компонент в него.
Создание приложения на основе Windows с помощью COM-компонента
С помощью Visual Basic в меню "Файл " нажмите кнопку "Создать", а затем " Проект".
В диалоговом окне "Новый проект" выберите узел Visual Basic и выберите приложение Windows. В поле "Имя" введите
RegFreeComDemo.В обозревателе решений нажмите кнопку "Показать все файлы" , чтобы отобразить ссылки на проект.
Щелкните правой кнопкой мыши узел "Ссылки" и выберите "Добавить ссылку " в контекстном меню.
В диалоговом окне "Добавить ссылку " щелкните вкладку "Обзор ", перейдите к VB6Hello.dll, а затем выберите ее.
Ссылка VB6Hello отображается в списке ссылок.
Наведите указатель на панель элементов, выберите элемент управления Button и перетащите его в форму Form1 .
В окне "Свойства" задайте для свойства Text кнопки значение Hello.
Дважды щелкните кнопку, чтобы добавить код обработчика и в файле кода добавьте код, чтобы обработчик считывал следующее:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim VbObj As New VB6Hello.Class1 VbObj.SayHello() End SubЗапустите приложение. В меню отладки нажмите кнопку "Начать отладку".
Затем необходимо изолировать элемент управления. Каждый com-компонент, который использует приложение, представлен в проекте в качестве com-ссылки. Эти ссылки отображаются в узле "Ссылки " в окне обозревателя решений . (Обратите внимание, что можно добавлять ссылки напрямую с помощью команды "Добавить ссылку " в меню "Проект " или косвенно перетаскивая элемент управления ActiveX в форму.)
Ниже показано, как изолировать com-компонент и опубликовать обновленное приложение, содержащее изолированный элемент управления:
Изоляция COM-компонента
В обозревателе решений в узле "Ссылки" выберите ссылку VB6Hello .
В окне "Свойства" измените значение изолированного свойства с false на True.
В меню "Сборка" щелкните "Создать решение".
Теперь, когда вы нажимаете клавишу F5, приложение работает должным образом, но теперь оно запускается в режиме без регистрации COM. Чтобы доказать это, попробуйте отменить регистрацию компонента VB6Hello.dll и запустить RegFreeComDemo1.exe за пределами интегрированной среды разработки Visual Studio. На этот раз, когда кнопка нажимается, она по-прежнему работает. Если временно переименовать манифест приложения, это снова приведет к ошибке.
Замечание
Вы можете имитировать отсутствие COM-компонента, временно отменив регистрацию. Откройте командную строку, перейдите в системную папку, введя cd /d %windir%\system32, а затем отмените регистрацию компонента, введя regsvr32 /u VB6Hello.dll. Его можно зарегистрировать снова, введя regsvr32 VB6Hello.dll.
Последний шаг — опубликовать приложение с помощью ClickOnce:
Чтобы опубликовать обновление приложения с изолированным COM-компонентом
В меню Сборка щелкните Опубликовать RegFreeComDemo.
Откроется мастер публикации.
В мастере публикации укажите расположение на диске локального компьютера, где можно получить доступ и проверить опубликованные файлы.
Нажмите кнопку "Готово ", чтобы опубликовать приложение.
Если вы изучаете опубликованные файлы, обратите внимание, что файл sysmon.ocx включен. Элемент управления полностью изолирован для этого приложения, то есть если компьютер конечного пользователя имеет другое приложение, использующее другую версию элемента управления, он не может препятствовать этому приложению.
Ссылка на нативные сборки
Visual Studio поддерживает ссылки на собственные сборки Visual Basic 6.0 или C++; такие ссылки называются собственными ссылками. Вы можете определить, является ли ссылка собственной, убедившись, что свойство типа файла установлено на Собственный или ActiveX.
Чтобы добавить собственную ссылку, используйте команду "Добавить ссылку ", а затем перейдите к манифесту. Некоторые компоненты помещают этот манифест внутрь библиотеки DLL. В этом случае можно просто выбрать библиотеку DLL, и Visual Studio добавит ее в качестве собственной ссылки, если она обнаруживает, что компонент содержит внедренный манифест. Visual Studio также будет автоматически включать все зависимые файлы или сборки, перечисленные в манифесте, если они находятся в той же папке, что и указанный компонент.
Изоляция элементов управления COM упрощает развертывание COM-компонентов, которые еще не имеют манифестов. Однако если компонент поставляется с манифестом, можно напрямую ссылаться на манифест. На самом деле всегда следует использовать манифест, предоставленный автором компонента, где это возможно, а не с помощью изолированного свойства.
Ограничения развертывания компонента COM без регистрации
Com без регистрации предоставляет четкие преимущества по сравнению с традиционными методами развертывания.
Не каждый компонент подходит для использования режима COM без регистрации. Компонент не является подходящим, если одно из следующих утверждений истинно:
Компонент является внепроцессным сервером. Серверы EXE не поддерживаются; поддерживаются только библиотеки DLL.
Компонент является частью операционной системы или является системным компонентом, например XML, компонентом браузера или компонентами Microsoft Data Access (MDAC). Следует следовать политике распространения автора компонента; Обратитесь к поставщику.
Компонент является частью приложения, например Microsoft Office. Например, не следует пытаться изолировать объектную модель Microsoft Excel. Это часть Office и может использоваться только на компьютере с полным установленным продуктом Office.
Компонент предназначен для использования в качестве надстройки или оснастки, например надстройки Office или элемента управления в веб-браузере. Такие компоненты обычно требуют какой-либо схемы регистрации, определенной средой размещения, которая выходит за рамки самого манифеста.
Компонент управляет физическим или виртуальным устройством для системы, например драйвером для диспетчера очереди печати.
Компонент является распространяемым компонентом для доступа к данным. Приложениям данных обычно требуется установить отдельный распространяемый доступ к данным, прежде чем они смогут запуститься. Не следует пытаться изолировать такие компоненты, как Элемент управления данными Microsoft ADO, Microsoft OLE DB или компоненты Microsoft Data Access (MDAC). Вместо этого, если приложение использует MDAC или SQL Server Express, вы должны установить их в качестве необходимых компонентов; см. инструкцию: установка необходимых компонентов с помощью приложения ClickOnce.
В некоторых случаях разработчик компонента может перепроектировать его так, чтобы он не требовал регистрации в COM. Если это невозможно, вы по-прежнему можете создавать и публиковать приложения, которые зависят от них через стандартную схему регистрации с помощью начального загрузчика. Дополнительные сведения см. в разделе "Создание пакетов начальной загрузки".
Компонент COM можно изолировать только один раз для каждого приложения. Например, вы не можете изолировать один и тот же com-компонент от двух разных проектов библиотеки классов , которые являются частью одного приложения. Это приведет к предупреждению при сборке, и приложению не удастся загрузиться во время выполнения. Чтобы избежать этой проблемы, корпорация Майкрософт рекомендует инкапсулировать компоненты COM в одной библиотеке классов.
Существует несколько сценариев, в которых требуется регистрация COM на компьютере разработчика, даже если развертывание приложения не требует регистрации. Свойство
Isolatedтребует, чтобы компонент COM был зарегистрирован на компьютере разработчика для автоматического создания манифеста во время сборки. Во время сборки отсутствуют возможности для фиксации регистрации, вызывающие саморегистрацию. Кроме того, все классы, не определенные явным образом в библиотеке типов, не будут отражены в манифесте. При использовании COM-компонента с предварительно существующим манифестом, например нативной ссылкой, компонент может не быть зарегистрирован на этапе разработки. Однако регистрация требуется, если компонент является элементом ActiveX, и вы хотите включить его в панель элементов и конструктор Windows Forms.