Uaktualnianie istniejącego formantu ActiveX

Istniejące kontrolki ActiveX (dawniej kontrolki OLE) mogą być używane w Internecie bez modyfikacji. Można jednak zmodyfikować kontrolki w celu zwiększenia ich wydajności.

Ważne

ActiveX to starsza technologia, która nie powinna być używana do tworzenia nowych rozwiązań. Aby uzyskać więcej informacji na temat nowoczesnych technologii zastępujących activex, zobacz Kontrolki ActiveX. Obsługa kontrolek ActiveX została wycofana w nowszych wersjach programu Internet Explorer i nie jest obsługiwana przez nowoczesne przeglądarki. Firma Microsoft nie dostarcza już składników ActiveX dostępnych w Internecie.

W przypadku korzystania z kontrolki na stronie sieci Web istnieją dodatkowe zagadnienia. Plik ocx i wszystkie pliki pomocnicze muszą znajdować się na maszynie docelowej lub być pobierane przez Internet. Dzięki temu rozmiar kodu i czas pobierania są ważne. Pliki do pobrania można spakować w podpisanym pliku cab. Kontrolkę można oznaczyć jako bezpieczną dla skryptów i jako bezpieczną do inicjowania.

W tym artykule omówiono następujące tematy:

Optymalizacje można również dodać zgodnie z opisem w temacie Kontrolki ActiveX: Optymalizacja. Narzędzia Monikers mogą służyć do pobierania właściwości i dużych obiektów BLOB asynchronicznie, zgodnie z opisem w kontrolkach ActiveX w Internecie.

Kod pakowania do pobierania

Aby uzyskać więcej informacji na ten temat, zobacz Tworzenie pakietów kontrolek ActiveX.

The CODEBASE Tag

Kontrolki ActiveX są osadzone na stronach sieci Web przy użyciu tagu <OBJECT> . Parametr CODEBASE tagu <OBJECT> określa lokalizację, z której ma być pobierana kontrolka. CODEBASE program może pomyślnie wskazać wiele różnych typów plików.

Używanie tagu CODEBASE z plikiem OCX

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

To rozwiązanie pobiera tylko plik ocx kontrolki i wymaga, aby wszystkie obsługiwane biblioteki DLL zostały już zainstalowane na komputerze klienckim. Będzie to działać w przypadku kontrolek ActiveX programu Internet Explorer i MFC utworzonych za pomocą języka Visual C++, ponieważ program Internet Explorer jest dostarczany z pomocniczymi bibliotekami DLL dla kontrolek Visual C++. Jeśli inna przeglądarka internetowa z obsługą kontrolek ActiveX jest używana do wyświetlania tej kontrolki, to rozwiązanie nie będzie działać.

Używanie tagu CODEBASE z plikiem INF

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

Plik inf będzie kontrolować instalację pliku ocx i jego plików pomocniczych. Ta metoda nie jest zalecana, ponieważ nie można podpisać pliku inf (zobacz Podpisywanie kodu dla wskaźników podpisywania przy podpisywaniu kodu).

Używanie tagu CODEBASE z plikiem CAB

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

Pliki cabinet to zalecany sposób tworzenia pakietów kontrolek ActiveX korzystających z MFC. Pakowanie kontrolki ActiveX MFC w pliku cabinet umożliwia dołączanie pliku inf w celu kontrolowania instalacji kontrolki ActiveX i wszelkich zależnych bibliotek DLL (takich jak biblioteki DLL MFC). Użycie pliku CAB automatycznie kompresuje kod w celu szybszego pobierania. Jeśli do pobierania składnika używasz pliku cab, szybciej podpiszesz cały plik cab niż każdy składnik.

Tworzenie plików CAB

Narzędzia do tworzenia plików cabinet są teraz częścią zestawu Windows SDK.

Plik cabinet wskazywany przez CODEBASE element powinien zawierać plik ocx dla kontrolki ActiveX i plik inf w celu kontrolowania jego instalacji. Plik cabinet można utworzyć, określając nazwę pliku sterującego i plik inf. Nie dołączaj zależnych bibliotek DLL, które mogą już istnieć w systemie w tym pliku cabinet. Na przykład biblioteki DLL MFC są pakowane w osobnym pliku cabinet i określane przez plik inf kontroli.

Aby uzyskać szczegółowe informacje na temat tworzenia pliku CAB, zobacz Tworzenie pliku CAB.

Plik INF

Poniższy przykład, spindial.inf, zawiera listę plików pomocniczych i informacje o wersji potrzebne do kontrolki MFC Spindial. Plik mfc42.cab jest dostarczany i podpisany przez firmę Microsoft.

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

<Tag OBJECT>

Poniższy przykład ilustruje użycie tagu <OBJECT> do spakowania przykładowej kontrolki 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>

W tym przypadku plik spindial.cab będzie zawierać dwa pliki, spindial.ocx i spindial.inf. Następujące polecenie skompiluje plik cabinet:

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

Parametr -s 6144 rezerwuje miejsce w szafie na potrzeby podpisywania kodu.

Tag wersji

Należy pamiętać, że #Version informacje określone w pliku CAB mają zastosowanie do kontrolki określonej przez parametr CLASSID tagu <OBJECT> .

W zależności od określonej wersji możesz wymusić pobranie kontrolki. Aby uzyskać pełne specyfikacje tagu OBJECT , w tym parametr CODEBASE , zobacz dokumentację W3C.

Oznaczanie Sejf kontrolki do tworzenia skryptów i inicjowania

Kontrolki ActiveX używane na stronach sieci Web powinny być oznaczone jako bezpieczne dla skryptów i bezpieczne do inicjowania, jeśli są one w rzeczywistości bezpieczne. Bezpieczna kontrola nie będzie wykonywać operacji we/wy dysku ani bezpośrednio uzyskać dostępu do pamięci lub rejestrów maszyny.

Kontrolki można oznaczyć jako bezpieczne do tworzenia skryptów i bezpiecznego inicjowania za pośrednictwem rejestru. Zmodyfikuj DllRegisterServer , aby dodać wpisy podobne do poniższych, aby oznaczyć kontrolkę jako bezpieczną dla skryptów i trwałości w rejestrze. Alternatywną metodą jest zaimplementowanie IObjectSafetymetody .

Zdefiniujesz identyfikatory GUID (globalnie unikatowe identyfikatory) dla kontrolki, aby oznaczyć ją jako bezpieczną dla skryptów i trwałości. Kontrolki, które mogą być bezpiecznie skryptowe, będą zawierać wpis rejestru podobny do następującego:

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

Kontrolki, które mogą być bezpiecznie inicjowane z danych trwałych, są oznaczone jako bezpieczne dla trwałości z wpisem rejestru podobnym do:

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

Dodaj wpisy podobne do następujących (podstawianie identyfikatora klasy kontrolki zamiast {06889605-B8D0-101A-91F1-00608CEAD5B3}) w celu skojarzenia kluczy z następującym identyfikatorem klasy:

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}

Problemy z licencjonowaniem

Jeśli chcesz użyć licencjonowanej kontrolki na stronie sieci Web, musisz sprawdzić, czy umowa licencyjna zezwala na korzystanie z niej w Internecie i utworzyć plik pakietu licencji (LPK).

Licencjonowana kontrolka ActiveX nie zostanie prawidłowo załadowana na stronie HTML, jeśli komputer z uruchomionym programem Internet Explorer nie ma licencji na korzystanie z kontrolki. Jeśli na przykład licencjonowana kontrolka została skompilowana przy użyciu języka Visual C++, strona HTML korzystająca z kontrolki zostanie załadowana prawidłowo na komputerze, na którym została skompilowana, ale nie zostanie załadowana na innym komputerze, chyba że zostaną uwzględnione informacje o licencjonowaniu.

Aby użyć licencjonowanej kontrolki ActiveX w programie Internet Explorer, należy sprawdzić umowę licencyjną dostawcy, aby sprawdzić, czy licencja na kontrolek zezwala:

  • Redystrybucja

  • Korzystanie z kontrolki w Internecie

  • Użycie parametru Codebase

Aby użyć licencjonowanej kontrolki na stronie HTML na maszynie bez licencji, musisz wygenerować plik pakietu licencji (LPK). Plik LPK zawiera licencje czasu wykonywania dla licencjonowanych kontrolek na stronie HTML. Ten plik jest generowany za pośrednictwem pliku LPK_TOOL.EXE, który jest dostarczany z zestawem ActiveX SDK.

Aby utworzyć plik LPK

  1. Uruchom plik LPK_TOOL.EXE na komputerze, który ma licencję na używanie kontrolki.

  2. W oknie dialogowym Narzędzie do tworzenia pakietów licencji na liście Dostępne kontrolki zaznacz każdą licencjonowana kontrolkę ActiveX, która będzie używana na stronie HTML, a następnie kliknij przycisk Dodaj.

  3. Kliknij przycisk Zapisz i zakończ i wpisz nazwę pliku LPK. Spowoduje to utworzenie pliku LPK i zamknięcie aplikacji.

Aby osadzić licencjonowany formant na stronie HTML

  1. Edytuj stronę HTML. Na stronie HTML wstaw <tag OBJECT> dla obiektu Menedżera licencji przed innymi <tagami OBJECT> . Menedżer licencji to kontrolka ActiveX zainstalowana w programie Internet Explorer. Jego identyfikator klasy jest pokazany poniżej. Ustaw właściwość LPKPath obiektu Menedżera licencji na ścieżkę i nazwę pliku LPK. Na stronę HTML można mieć tylko jeden plik LPK.
<OBJECT CLASSID = "clsid:5220cb21-c88d-11cf-b347-00aa00a28331">
<PARAM NAME="LPKPath" VALUE="relative URL to .LPK file">
</OBJECT>
  1. <Wstaw tag OBJECT> dla licencjonowanej kontrolki po tagu Menedżer licencji.

    Na przykład poniżej przedstawiono stronę HTML wyświetlającą kontrolkę Microsoft Masked Edit. Pierwszy identyfikator klasy jest przeznaczony dla kontrolki Menedżer licencji, drugi identyfikator klasy jest dla kontrolki Masked Edit. Zmień tagi, aby wskazywały ścieżkę względną utworzonego wcześniej pliku lpk, a następnie dodaj tag obiektu, w tym identyfikator klasy dla kontrolki.

  2. <Wstaw atrybut EMBED> dla pliku LPK, jeśli używasz wtyczki NCompass ActiveX.

    Jeśli kontrolka może być wyświetlana w innych przeglądarkach z włączoną obsługą active — na przykład Netscape przy użyciu wtyczki NCompass ActiveX — musisz dodać składnię <OSADZANIa> , jak pokazano poniżej.

<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>

Aby uzyskać więcej informacji na temat licencjonowania kontrolek, zobacz Kontrolki ActiveX: licencjonowanie kontrolki ActiveX.

Kod podpisywania

Podpisywanie kodu jest przeznaczone do identyfikowania źródła kodu i zagwarantowania, że kod nie uległ zmianie od czasu podpisania. W zależności od ustawień bezpieczeństwa przeglądarki użytkownicy mogą być ostrzegani przed pobraniem kodu. Użytkownicy mogą ufać niektórym właścicielom certyfikatów lub firmom, w którym przypadku kod podpisany przez zaufanych użytkowników zostanie pobrany bez ostrzeżenia. Kod jest podpisany cyfrowo, aby uniknąć manipulowania.

Upewnij się, że końcowy kod jest podpisany, aby można było automatycznie pobrać kontrolkę bez wyświetlania komunikatów ostrzegawczych dotyczących zaufania. Aby uzyskać szczegółowe informacje na temat podpisywania kodu, zapoznaj się z dokumentacją dotyczącą aplikacji Authenticode w zestawie ACTIVEX SDK i zobacz Podpisywanie pliku CAB.

W zależności od ustawień poziomu zaufania i bezpieczeństwa przeglądarki certyfikat może być wyświetlany w celu zidentyfikowania osoby podpisującego lub firmy. Jeśli poziom bezpieczeństwa nie jest żaden lub jeśli właściciel certyfikatu podpisanego formantu jest zaufany, certyfikat nie będzie wyświetlany. Aby uzyskać szczegółowe informacje na temat sposobu, w jaki ustawienie bezpieczeństwa przeglądarki określi, czy kontrolka jest pobierana i wyświetlany certyfikat, zobacz Temat Sejf ty Poziomy przeglądarki i Zachowanie kontroli.

Kod gwarancji podpisywania cyfrowego nie uległ zmianie, ponieważ został podpisany. Skrót kodu jest pobierany i osadzony w certyfikacie. Ten skrót jest później porównywany z skrótem kodu pobranego po pobraniu kodu, ale przed jego uruchomieniem. Firmy, takie jak Verisign, mogą dostarczać prywatne i publiczne klucze potrzebne do podpisania kodu. Zestaw SDK ActiveX jest dostarczany z narzędziem MakeCert do tworzenia certyfikatów testowych.

Zarządzanie paletą

Kontenery określają paletę i udostępniają ją jako właściwość otoczenia, DISPID_AMBIENT_PALETTE. Kontener (na przykład Internet Explorer) wybiera paletę używaną przez wszystkie kontrolki ActiveX na stronie w celu określenia własnej palety. Zapobiega to wyświetlaniu migotania i przedstawia spójny wygląd.

Kontrolka może przesłonić OnAmbientPropertyChange obsługę powiadomień o zmianach w palecie.

Kontrolka może przesłonić OnGetColorSet , aby zwrócić zestaw kolorów, aby narysować paletę. Kontenery używają wartości zwracanej, aby określić, czy kontrolka jest świadoma palety.

Zgodnie z wytycznymi OCX 96 kontrolka musi zawsze realizować paletę w tle.

Starsze kontenery, które nie korzystają z właściwości palety otoczenia, będą wysyłać komunikaty WM_QUERYNEWPALETTE i WM_PALETTECHANGED. Kontrolka może przesłonić OnQueryNewPalette i OnPaletteChanged obsługiwać te komunikaty.

Poziomy i zachowanie kontroli w przeglądarce Internet Explorer Sejf ty

Przeglądarka ma opcje poziomu bezpieczeństwa, konfigurowalne przez użytkownika. Ponieważ strony sieci Web mogą zawierać aktywną zawartość, która może potencjalnie zaszkodzić komputerowi użytkownika, przeglądarki umożliwiają użytkownikowi wybranie opcji poziomu bezpieczeństwa. W zależności od sposobu, w jaki przeglądarka implementuje poziomy bezpieczeństwa, kontrolka może nie zostać pobrana w ogóle lub wyświetli certyfikat lub komunikat ostrzegawczy, aby umożliwić użytkownikowi wybranie w czasie wykonywania, czy pobrać kontrolkę. Poniżej wymieniono zachowanie kontrolek ActiveX na wysokim, średnim i niskim poziomie bezpieczeństwa w programie Internet Explorer.

Tryb wysokiej Sejf ty

  • Nie zostaną pobrane niepodpisane kontrolki.

  • Podpisane kontrolki będą wyświetlać certyfikat, jeśli nie jest zaufany (użytkownik może wybrać opcję, aby zawsze ufać kodowi od tego właściciela certyfikatu od teraz).

  • Tylko kontrolki oznaczone jako bezpieczne będą miały trwałe dane i/lub mogą być możliwe do tworzenia skryptów.

Średni tryb Sejf ty

  • Kontrolki niepodpisane będą wyświetlać ostrzeżenie przed pobraniem.

  • Podpisane kontrolki będą wyświetlać certyfikat, jeśli nie jest niezaufany.

  • Kontrolki, które nie są oznaczone jako bezpieczne, będą wyświetlać ostrzeżenie.

Tryb niskich Sejf ty

  • Kontrolki są pobierane bez ostrzeżenia.

  • Skrypty i trwałość występują bez ostrzeżenia.

Zobacz też

MFC — zadania związane z programowaniem Internetu
MFC — podstawy programowania Internetu
Kontrolki ActiveX MFC: licencjonowanie kontrolki ActiveX