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


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

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

Важно!

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

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

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

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

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

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

Тег CODEBASE

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

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

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

Это решение скачивает только ocx-файл элемента управления и требует, чтобы все вспомогательные библиотеки DLL уже были установлены на клиентском компьютере. Это будет работать для элементов управления Internet Обозреватель и MFC ActiveX, созданных с помощью Visual C++, так как Интернет Обозреватель поставляется со вспомогательными библиотеками DLL для элементов управления Visual C++. Если для просмотра этого элемента управления используется другой интернет-браузер, поддерживающий элемент управления 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"

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

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

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

Файл кабинета, на который указывает, 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-странице, если компьютер под управлением Интернета Обозреватель не лицензирован для использования этого элемента управления. Например, если лицензированный элемент управления был создан с помощью Visual C++, HTML-страница с помощью элемента управления будет правильно загружаться на компьютере, где был создан элемент управления, но он не будет загружаться на другой компьютер, если не включены сведения о лицензировании.

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

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

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

  • Использование параметра 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, установленный с Обозреватель Интернета. Его идентификатор класса показан ниже. Задайте свойству 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-страница, отображающая элемент управления "Изменение маскированных" майкрософт, показана ниже. Первый идентификатор класса предназначен для элемента управления License Manager, второй идентификатор класса — для элемента управления "Маскированные изменения". Измените теги, чтобы указать относительный путь к созданному ранее файлу .lpk, и добавьте тег объекта, включая идентификатор класса для элемента управления.

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

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

<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-файла.

В зависимости от параметров уровня безопасности доверия и браузера сертификат может отображаться для идентификации пользователя или компании. Если уровень безопасности не равен ни одному или если владелец сертификата подписанного элемента управления является доверенным, сертификат не будет отображаться. Дополнительные сведения о том, как параметр безопасности браузера будет загружен и отображается сертификат, см. в разделе "Интернет Обозреватель браузер Сейф уровней" и "Поведение элемента управления".

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

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

Контейнеры определяют палитру и делают ее доступной как окружающее свойство, DISPID_AМБIENT_PALETTE. Контейнер (например, Интернет Обозреватель) выбирает палитру, которая используется всеми элементами ActiveX на странице для определения собственной палитры. Это предотвращает отображение мерцания и представляет согласованный внешний вид.

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

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

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

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

Обозреватель Браузер Сейф уровнях и поведении элементов управления в Интернете

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

Режим высокой Сейф сти

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

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

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

Средний режим Сейф ty

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

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

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

Режим низкой Сейф сти

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

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

См. также

Задачи программирования для интернет-решений MFC
Основы программирования для интернет-решений MFC
Элементы ActiveX в MFC. Лицензирование элемента ActiveX