Обновление существующего управляющего элемента ActiveX

Замечание

Библиотека классов Microsoft Foundation (MFC) продолжает поддерживаться. Однако мы больше не добавляем функции или обновляем документацию.

Существующие элементы ActiveX (ранее — элементы управления OLE) можно использовать в Интернете без изменений. Однако может потребоваться изменить элементы управления, чтобы повысить их производительность.

Это важно

ActiveX — это устаревшая технология, которая не должна использоваться для новой разработки. Дополнительные сведения о современных технологиях, заменяющих ActiveX, см. в разделе ActiveX Controls. Поддержка элементов ActiveX была устаревшей в более поздних версиях Internet Explorer и не поддерживается современными браузерами. Корпорация Майкрософт больше не предоставляет компоненты ActiveX, доступные в Интернете.

При использовании вашего элемента управления на веб-странице требуется учитывать дополнительные аспекты. OCX-файл и все вспомогательные файлы должны находиться на целевом компьютере или загружаться через Интернет. Это делает размер кода и время загрузки важным фактором. Скачивание можно упаковыть в подписанный файл .cab. Вы можете пометить элемент управления как безопасный для выполнения сценариев и как безопасный для инициализации.

В этом статье рассматриваются следующие темы:

Вы также можете добавить оптимизацию, как описано в ActiveX Controls: оптимизация. Моникеры можно применять для асинхронной загрузки характеристик и крупных объектов типа BLOB, как это описано в ActiveX Controls в Интернете.

Код упаковки для скачивания

Дополнительные сведения об этой теме см. в разделе "Упаковка элементов ActiveX".

Тег CODEBASE

Элементы ActiveX внедрены на веб-страницы с помощью тега <OBJECT>. Параметр CODEBASE тега <OBJECT> указывает расположение, из которого необходимо скачать элемент управления. CODEBASE может указывать на несколько различных типов файлов успешно.

Использование тега CODEBASE с OCX-файлом

CODEBASE="http://example.contoso.com/mycontrol.ocx#version=4,
    70,
    0,
    1086"

Это решение скачивает только ocx-файл элемента управления и требует, чтобы все вспомогательные библиотеки DLL уже были установлены на клиентском компьютере. Это будет работать для элементов управления Internet Explorer и MFC ActiveX, созданных с помощью Visual Studio, так как Internet Explorer поставляется с поддержкой библиотек DLL для элементов управления Visual Studio. Если для просмотра этого элемента управления используется другой интернет-браузер, поддерживающий элемент управления ActiveX, это решение не будет работать.

Использование тега CODEBASE с INF-файлом

CODEBASE="http://example.contoso.com/trustme.inf"

INF-файл управляет установкой ocx и его вспомогательными файлами. Этот метод не рекомендуется, так как невозможно подписать .INF-файл (см. раздел Подписание кода для рекомендаций о подписании кода).

Использование тега CODEBASE с CAB-файлом

CODEBASE="http://example.contoso.com/acontrol.cab#version=1,
    2,
    0,
    0"

CAB-файлы — это рекомендуемый способ сборки элементов ActiveX, использующих MFC. Упаковка элемента управления ActiveX MFC в файл шкафа позволяет включить INF-файл для управления установкой элемента ActiveX и любыми зависимыми DLL-файлами (например, библиотеки DLL MFC). Использование CAB-файла автоматически сжимает код для более быстрого скачивания. Если вы используете файл .cab для скачивания компонентов, то он быстрее подписывает весь файл .cab, чем каждый отдельный компонент.

Создание CAB-файлов

Средства создания кабинетных файлов теперь являются частью Windows SDK.

Файл кабинета, на который указывает CODEBASE, должен содержать OCX-файл для элемента ActiveX и INF-файл для управления его установкой. Создайте файл шкафа, указав имя файла элемента управления и INF-файл. Не включать зависимые библиотеки DLL, которые уже могут существовать в системе в этом файле кабинета. Например, библиотеки DLL MFC упаковываются в отдельный кабинетный файл и ссылаются на управляющий файл .INF.

Дополнительные сведения о создании CAB-файла см. в статье "Создание CAB-файла".

INF-файл

В следующем примере spindial.inf перечислены вспомогательные файлы и сведения о версии, необходимые для элемента управления MFC Spindial. mfc42.cab предоставляется и подписан корпорацией Майкрософт.

Contents of spindial.inf:
[mfc42installer]
file-win32-x86=http://example.contoso.com/controls/vc/mfc42.cab
[Olepro32.dll] - FileVersion=5,
    0,
    4261,
    0
[Mfc42.dll] - FileVersion=6,
    0,
    8168,
    0
[Msvcrt.dll] - FileVersion=6,
    0,
    8168,
    0

<Тег OBJECT>

В следующем примере показано использование тега <OBJECT> для упаковки примера элемента управления MFC Spindial.

<OBJECT ID="Spindial1" WIDTH=100 HEIGHT=51
    CLASSID="CLSID:06889605-B8D0-101A-91F1-00608CEAD5B3"
    CODEBASE="http://example.contoso.com/spindial.cab#Version=1,0,0,001">
<PARAM NAME="_Version" VALUE="65536">
<PARAM NAME="_ExtentX" VALUE="2646">
<PARAM NAME="_ExtentY" VALUE="1323">
<PARAM NAME="_StockProps" VALUE="0">
<PARAM NAME="NeedlePosition" VALUE="2">
</OBJECT>

В этом случае spindial.cab будет содержать два файла, spindial.ocx и spindial.inf. Следующая команда создаст файл шкафа:

C:\CabDevKit\cabarc.exe -s 6144 N spindial.cab spindial.ocx spindial.inf

Параметр -s 6144 резервирует пространство в кабинете для подписывания кода.

Тег версии

Обратите внимание, что #Version информация, указанная в CAB-файле, относится к элементу управления, указанному параметром CLASSID тега <OBJECT>.

В зависимости от указанной версии можно принудительно скачать элемент управления. Полные спецификации тега OBJECT , включая параметр CODEBASE , см. в справочнике по W3C.

Обозначение элемента управления, безопасного для использования в сценариях и инициализации

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

Элементы управления можно пометить как безопасные для сценариев и безопасные для инициализации через реестр. Измените DllRegisterServer , чтобы добавить записи, аналогичные приведенным ниже, чтобы пометить элемент управления как безопасный для сценариев и сохраняемости в реестре. Альтернативный метод — реализовать IObjectSafety.

Вы определите GUID (глобально уникальные идентификаторы) для вашего элемента управления, чтобы пометить его безопасным для выполнения скриптов и для сохранения данных. Элементы управления, которые можно безопасно скриптовать, будут содержать запись реестра, похожую на следующую:

HKEY_CLASSES_ROOT\Component Categories\{7DD95801-9882-11CF-9FA9-00AA006C42C4}

Элементы управления, которые можно безопасно инициализировать из постоянных данных, помечаются безопасными для сохраняемости с записью реестра, аналогичной следующему:

HKEY_CLASSES_ROOT\Component Categories\{7DD95802-9882-11CF-9FA9-00AA006C42C4}

Добавьте записи, аналогичные следующим (заменяя идентификатор класса элемента управления вместо {06889605-B8D0-101A-91F1-00608CEAD5B3}) для связывания ключей со следующим идентификатором класса:

HKEY_CLASSES_ROOT\CLSID\{06889605-B8D0-101A-91F1-00608CEAD5B3}\Implemented Categories\{7DD95801-9882-11CF-9FA9-00AA006C42C4}
HKEY_CLASSES_ROOT\CLSID\{06889605-B8D0-101A-91F1-00608CEAD5B3}\Implemented Categories\{7DD95802-9882-11CF-9FA9-00AA006C42C4}

Проблемы с лицензированием

Если вы хотите использовать лицензированный элемент управления на веб-странице, необходимо убедиться, что лицензионное соглашение разрешает его использование в Интернете и создает для него файл пакета лицензий (LPK).

Лицензированный элемент activeX не загружается должным образом на HTML-странице, если компьютер под управлением Internet Explorer не лицензирован для использования элемента управления. Например, если лицензированный элемент управления был создан с помощью Visual Studio, HTML-страница с помощью элемента управления будет правильно загружаться на компьютере, где был создан элемент управления, но он не будет загружаться на другой компьютер, если не включены сведения о лицензировании.

Чтобы использовать лицензионное использование элемента управления ActiveX в Internet Explorer, необходимо проверить лицензионное соглашение поставщика, чтобы убедиться, что лицензия на использование элемента управления разрешает:

  • Повторное распространение

  • Использование элемента управления в Интернете

  • Использование параметра Codebase

Чтобы использовать лицензированный элемент управления на HTML-странице на нелицензированного компьютера, необходимо создать файл пакета лицензий (LPK). Файл LPK содержит лицензии во время выполнения для лицензированных элементов управления на HTML-странице. Этот файл создается с помощью LPK_TOOL.EXE, которая поставляется с пакетом SDK ActiveX.

Создание файла LPK

  1. Запустите LPK_TOOL.EXE на компьютере, лицензированном для использования элемента управления.

  2. В диалоговом окне "Средство разработки пакетов лицензий " в списке "Доступные элементы управления " выберите каждый лицензированный элемент ActiveX, который будет использоваться на HTML-странице и нажмите кнопку "Добавить".

  3. Нажмите «Сохранить и выйти» и введите имя для файла LPK. Это создаст файл LPK и закройте приложение.

Внедрение лицензированного элемента управления на HTML-странице

  1. Измените HTML-страницу. На HTML-странице вставьте <тег OBJECT> для объекта License Manager перед другими <тегами OBJECT> . Диспетчер лицензий — это элемент activeX, установленный с помощью Internet Explorer. Его идентификатор класса показан ниже. Задайте свойству LPKPath объекта License Manager путь и имя файла LPK. На HTML-странице можно использовать только один файл LPK.
<OBJECT CLASSID = "clsid:5220cb21-c88d-11cf-b347-00aa00a28331">
<PARAM NAME="LPKPath" VALUE="relative URL to .LPK file">
</OBJECT>
  1. <Вставьте тег OBJECT> для лицензированного элемента управления после тега Диспетчера лицензий.

    Например, HTML-страница, отображающая элемент управления Microsoft Masked Edit, показана ниже. Первый идентификатор класса предназначен для элемента управления License Manager, второй идентификатор класса — для элемента управления "Маскированные изменения". Измените теги, чтобы указать относительный путь к созданному ранее файлу .lpk, и добавьте тег объекта, включая идентификатор класса для элемента управления.

  2. <Вставьте атрибут EMBED> для файла LPK, если используется подключаемый модуль ActiveX NCompass.

    Если элемент управления можно просмотреть в других браузерах с поддержкой ActiveX (например, Netscape с помощью подключаемого плагина ActiveX NCompass), необходимо добавить синтаксис <EMBED>, как показано ниже.

<OBJECT CLASSID="clsid:5220cb21-c88d-11cf-b347-00aa00a28331">
<PARAM NAME="LPKPath" VALUE="maskedit.lpk">

<EMBED SRC = "maskedit.LPK">

</OBJECT>
<OBJECT CLASSID="clsid:C932BA85-4374-101B-A56C-00AA003668DC" WIDTH=100 HEIGHT=25>
</OBJECT>

Дополнительные сведения о лицензировании элементов ActiveX см. в статье ActiveX Controls: лицензирование элементов ActiveX.

Код подписывания

Подписывание кода предназначено для идентификации источника кода и для обеспечения того, чтобы код не изменился с момента его подписания. В зависимости от параметров безопасности браузера пользователи могут быть предупреждены перед скачиванием кода. Пользователи могут доверять определенным владельцам сертификатов или компаниям, в этом случае код, подписанный доверенными пользователями, будет скачан без предупреждения. Код подписывается цифровой подписью, чтобы избежать изменения.

Убедитесь, что завершенный код подписан таким образом, чтобы элемент управления можно было автоматически скачать без отображения предупреждений о доверии. Дополнительные сведения о том, как подписать код, см. в документации по Authenticode в пакете SDK ActiveX и в разделе Подписывание CAB-файла.

В зависимости от параметров уровня безопасности доверия и браузера сертификат может отображаться для идентификации пользователя или компании. Если уровень безопасности отсутствует или владелец сертификата подписанного элемента управления является доверенным, сертификат не будет отображаться. Смотрите раздел "Уровни безопасности браузера Internet Explorer и Поведение элемента управления", чтобы узнать, как параметр безопасности браузера определяет, будет ли загружен ваш элемент управления и отображается ли сертификат.

Код гарантии цифровой подписи не изменился с тех пор, как он был подписан. Хэш кода принимается и внедряется в сертификат. Этот хэш позже сравнивается с хэшом кода, взятого после скачивания кода, но до его запуска. Такие компании, как Verisign, могут предоставлять закрытые и открытые ключи, необходимые для подписывания кода. Пакет SDK ActiveX поставляется с MakeCert, служебная программа для создания тестовых сертификатов.

Управление палитрой

Контейнеры определяют палитру и делают ее доступной как окружающее свойство , DISPID_AMBIENT_PALETTE. Контейнер (например, Internet Explorer) выбирает палитру, которая используется всеми элементами ActiveX на странице для определения собственной палитры. Это предотвращает мерцание экрана и обеспечивает единообразный внешний вид.

Элемент управления может переопределить OnAmbientPropertyChange для обработки уведомлений об изменениях в палитре.

Элемент управления может переопределить OnGetColorSet, чтобы вернуть набор цветов для рисования палитры. Контейнеры используют возвращаемое значение, чтобы определить, поддерживает ли элемент управления работу с палитрами.

В соответствии с рекомендациями OCX 96 элемент управления всегда должен реализовать свою палитру в фоновом режиме.

Старые контейнеры, которые не используют свойство внешней палитры, будут отправлять WM_QUERYNEWPALETTE и WM_PALETTECHANGED сообщения. Элемент управления может переопределить OnQueryNewPalette и OnPaletteChanged, чтобы обрабатывать эти сообщения.

Уровни безопасности браузера Internet Explorer и поведение элементов управления

Браузер имеет параметры уровня безопасности, настраиваемого пользователем. Так как веб-страницы могут содержать активное содержимое, которое может повредить компьютеру пользователя, браузеры позволяют пользователю выбирать параметры уровня безопасности. В зависимости от того, как браузер реализует уровни безопасности, элемент управления может не загружаться вообще или отображать сертификат или предупреждающее сообщение, чтобы разрешить пользователю выбирать во время выполнения, следует ли скачать элемент управления. Поведение элементов ActiveX под высоким, средним и низким уровнем безопасности в Internet Explorer приведено ниже.

Режим высокой безопасности

  • Неподписанные элементы управления не будут загружены.

  • Подписанные элементы управления будут отображать сертификат, если он считается ненадежным (пользователь может выбрать вариант всегда доверять коду от этого владельца сертификата в будущем).

  • Только элементы управления, помеченные как безопасные, будут иметь постоянные данные и/или возможность скриптинга.

Средний режим безопасности

  • Неподписанные управляющие элементы будут отображать предупреждение перед загрузкой.

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

  • Элементы управления, не помеченные как безопасные, будут отображать предупреждение.

Режим низкой безопасности

  • Элементы управления скачиваются без предупреждения.

  • Скриптинг и сохранение данных происходят без предупреждения.

См. также

Задачи программирования в Интернете MFC
Основы интернет-программирования MFC
MFC ActiveX Controls: лицензирование элемента ActiveX