Compartilhar via


Atualizando um controle ActiveX existente

Os controles ActiveX existentes (antigos controles OLE) podem ser usados na Internet sem modificação. No entanto, convém modificar os controles para melhorar o desempenho.

Importante

O ActiveX é uma tecnologia herdada que não deve ser usada para novo desenvolvimento. Para mais informações sobre tecnologias modernas que substituem o ActiveX, confira Controles do ActiveX. O suporte para controles ActiveX foi preterido nas versões posteriores do Internet Explorer e eles não são compatíveis com navegadores modernos. A Microsoft não fornece mais componentes ActiveX acessíveis na Web.

Ao usar o controle em uma página da Web, existem considerações adicionais. O arquivo .ocx e todos os arquivos de suporte devem estar no computador de destino ou ser baixados pela Internet. Isso torna o tamanho do código e o tempo de download uma consideração importante. Os downloads podem ser empacotados em um arquivo .cab assinado. Você pode marcar o controle como seguro para scripts e como seguro para inicialização.

Este artigo discute os seguintes tópicos:

Você também pode adicionar otimizações, conforme descrito em Controles ActiveX: Otimização. Os monikers podem ser usados para baixar propriedades e BLOBs grandes de forma assíncrona, conforme descrito em Controles ActiveX na Internet.

Empacotamento de código para download

Para obter mais informações sobre esse assunto, confira Empacotamento de controles ActiveX.

A Marca CODEBASE

Os controles ActiveX são inseridos em páginas da Web usando a marca <OBJECT>. O parâmetro CODEBASE da marca <OBJECT> especifica o local em que o controle pode ser baixado. CODEBASE pode apontar para vários tipos de arquivo diferentes com êxito.

Uso da Marca CODEBASE com um arquivo OCX

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

Essa solução baixa apenas o arquivo .ocx do controle e exige que as DLLs de suporte já sejam instaladas no computador cliente. Isso dará certo para controles ActiveX do Internet Explorer e do MFC criados com o Visual C++, pois o Internet Explorer é fornecido com as DLLs de suporte para controles do Visual C++. Se outro navegador da Internet, compatível com o controle ActiveX, for usado para exibir esse controle, essa solução não funcionará.

Uso da Marca CODEBASE com um arquivo INF

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

Um arquivo .inf controlará a instalação de um .ocx e dos respectivos arquivos de suporte. Esse método não é recomendado, pois não é possível assinar um arquivo .inf (confira Assinatura de Código para obter ponteiros sobre a assinatura de código).

Uso da Marca CODEBASE com um arquivo CAB

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

Arquivos de gabinete são a maneira recomendada de empacotar os controles ActiveX que usam o MFC. Empacotar um controle ActiveX do MFC em um arquivo de gabinete permite que um arquivo .inf seja incluído para controlar a instalação do controle ActiveX e quaisquer DLLs dependentes (como as DLLs do MFC). O uso de um arquivo CAB compacta automaticamente o código para obter um download mais rápido. Se você estiver usando um arquivo .cab para download de componente, será mais rápido assinar todo o arquivo .cab, em vez de cada componente.

Criação de arquivos CAB

Agora as ferramentas para criar arquivos de gabinete fazem parte do SDK do Windows.

O arquivo de gabinete apontado por CODEBASE deve conter o arquivo .ocx para o controle ActiveX e um arquivo .inf para controlar a instalação. Você criará o arquivo de gabinete especificando o nome do arquivo de controle e um arquivo .inf. Não inclua as DLLs dependentes que já possam existir no sistema neste arquivo de gabinete. Por exemplo, as DLLs do MFC são empacotadas em um arquivo de gabinete separado e referenciadas pelo arquivo .inf de controle.

Para obter detalhes sobre como criar um arquivo CAB, confira Criação de um arquivo CAB.

O arquivo INF

O exemplo a seguir, spindial.inf, lista os arquivos de suporte e as informações de versão necessárias para o controle Spindial do MFC. O mfc42.cab é fornecido e assinado pela 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

A Marca <OBJECT>

O exemplo a seguir ilustra o uso da marca <OBJECT> para empacotar o controle de exemplo Spindial do MFC.

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

Nesse caso, spindial.cab conterá dois arquivos, spindial.ocx e spindial.inf. O comando a seguir criará o arquivo de gabinete:

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

O parâmetro -s 6144 reserva espaço no gabinete para assinatura de código.

A Marca de Versão

Observe aqui que as informações #Version especificadas com um arquivo CAB se aplicam ao controle especificado pelo parâmetro CLASSID da marca <OBJECT>.

Dependendo da versão especificada, você pode forçar o download do controle. Para obter especificações completas da marca OBJECT, incluindo o parâmetro CODEBASE, confira a referência do W3C.

Como marcar um controle seguro para scripts e inicialização

Os controles ActiveX usados em páginas da Web devem ser marcados como seguros para scripts e inicialização, se estiverem realmente seguros. Um controle seguro não executará a E/S do disco nem acessará a memória ou os registros de um computador diretamente.

Os controles podem ser marcados como seguros para scripts e inicialização por meio do registro. Modifique DllRegisterServer para adicionar entradas semelhantes às seguintes, para marcar o controle como seguro para scripts e persistência no registro. Um método alternativo é implementar IObjectSafety.

Você definirá GUIDs (Identificadores Globalmente Exclusivos) para o controle para marcá-los como seguros para scripts e para persistência. Os controles que podem receber scripts com segurança conterão uma entrada de registro semelhante à seguinte:

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

Os controles que podem ser inicializados com segurança a partir de dados persistentes são marcados como seguros para persistência com uma entrada de registro semelhante a:

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

Adicione entradas semelhantes às seguintes (substituindo a ID da classe do controle no lugar de {06889605-B8D0-101A-91F1-00608CEAD5B3}) para associar as chaves à seguinte ID da classe:

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}

Problemas de licenciamento

Se você quiser usar um controle licenciado em uma página da Web, deve verificar se o contrato de licença permite o uso na Internet e criar um LPK (arquivo de pacote de licença).

Um controle ActiveX licenciado não será carregado corretamente em uma página HTML, se o computador que executa o Internet Explorer não estiver licenciado para usar o controle. Por exemplo, se um controle licenciado foi criado usando o Visual C++, a página HTML que usa o controle será carregada corretamente no computador em que o controle foi criado, mas não será carregado em um computador diferente, a menos que as informações de licenciamento sejam incluídas.

Para usar um controle ActiveX licenciado no Internet Explorer, verifique o contrato de licença do fornecedor para ver se a licença do controle permite:

  • Redistribuição

  • Uso do controle na Internet

  • Uso do parâmetro de base de código

Para usar um controle licenciado em uma página HTML em um computador não licenciado, você deve gerar um LPK (arquivo de pacote de licença). O arquivo LPK contém licenças em tempo de execução para controles licenciados na página HTML. Esse arquivo é gerado por meio de LPK_TOOL.EXE, que vem com o SDK do ActiveX.

Para criar um arquivo LPK

  1. Execute LPK_TOOL.EXE em um computador licenciado para usar o controle.

  2. Na caixa de diálogo Ferramenta de Criação de Pacote de Licença, na caixa de listagem Controles Disponíveis, selecione cada controle ActiveX licenciado que será usado na página HTML e clique em Adicionar.

  3. Clique em Salvar & Sair e digite um nome para o arquivo LPK. Isso criará o arquivo LPK e fechará o aplicativo.

Para inserir um controle licenciado em uma página HTML

  1. Edite a página HTML. Na página HTML, insira uma <marca OBJECT> para o objeto Gerenciador de Licenças, antes de qualquer outra marca <OBJECT>. O Gerenciador de Licenças é um controle ActiveX instalado com o Internet Explorer. A ID da classe é mostrada abaixo. Defina a propriedade LPKPath do objeto Gerenciador de Licenças como o caminho e o nome do arquivo LPK. Você pode ter apenas um arquivo LPK por página HTML.
<OBJECT CLASSID = "clsid:5220cb21-c88d-11cf-b347-00aa00a28331">
<PARAM NAME="LPKPath" VALUE="relative URL to .LPK file">
</OBJECT>
  1. Insira a marca <OBJECT> para o controle licenciado, após a marca do Gerenciador de Licenças.

    Por exemplo, uma página HTML que exibe o controle de Edição Mascarada da Microsoft é mostrada abaixo. A ID da primeira classe é para o controle de Gerenciador de Licenças. A ID da segunda classe é para o controle de Edição Mascarada. Altere as marcas para apontar para o caminho relativo do arquivo .lpk criado anteriormente e adicione uma marca de objeto, incluindo a ID da classe para o controle.

  2. Insira o atributo <EMBED> para o arquivo LPK, se estiver usando o plug-in NCompass ActiveX.

    Se o controle puder ser exibido em outros navegadores habilitados para Active, por exemplo, o Netscape que usa o plug-in NCompass ActiveX, você deverá adicionar a sintaxe <EMBED>, conforme mostrado abaixo.

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

Para obter mais informações sobre licenciamento de controle, confira Controles ActiveX: licenciamento de um controle ActiveX.

Assinatura de código

A assinatura de código foi criada para identificar a origem do código e garantir que o código não foi alterado desde que foi assinado. Dependendo das configurações de segurança do navegador, os usuários podem ser avisados antes que o código seja baixado. Os usuários podem optar por confiar em determinados proprietários de certificados ou empresas. Nesse caso, o código assinado pelas partes confiáveis será baixado sem aviso. O código é assinado digitalmente para evitar adulteração.

Verifique se o código final foi assinado para que o controle possa ser baixado automaticamente, sem exibir mensagens de aviso de confiança. Para obter detalhes sobre como assinar o código, verifique a documentação no Authenticode do SDK do ActiveX e confira Assinatura de um arquivo CAB.

Dependendo das configurações de confiança e nível de segurança do navegador, um certificado pode ser exibido para identificar a pessoa ou a empresa de assinatura. Se o nível de segurança for nenhum ou se o proprietário do certificado do controle assinado for confiável, um certificado não será exibido. Confira Níveis de Segurança e Comportamento de Controle do Navegador Internet Explorer, para obter detalhes sobre como a configuração de segurança do navegador determinará se o controle será baixado e um certificado exibido.

O código de garantias de assinatura digital não foi alterado desde que foi assinado. Um hash do código é obtido e inserido no certificado. Posteriormente, esse hash é comparado a um hash do código obtido depois que o código é baixado, mas antes de ser executado. Empresas, como a Verisign, podem fornecer as chaves públicas e privadas necessárias para assinar o código. O SDK do ActiveX é fornecido com o MakeCert, um utilitário para criar certificados de teste.

Gerenciamento de paleta

Os contêineres determinam e disponibilizam a paleta como propriedade de ambiente, DISPID_AMBIENT_PALETTE. Um contêiner (por exemplo, o Internet Explorer) escolhe uma paleta usada por todos os controles ActiveX em uma página para determinar sua própria paleta. Isso impede a exibição de cintilação e apresenta uma aparência consistente.

Um controle pode substituir OnAmbientPropertyChange, para lidar com a notificação de alterações na paleta.

Um controle pode substituir OnGetColorSet, para retornar um conjunto de cores para desenhar a paleta. Os contêineres usam o valor retornado para determinar se um controle fez o reconhecimento da paleta.

De acordo com as diretrizes do OCX 96, um controle deve sempre perceber a paleta em segundo plano.

Os contêineres mais antigos, que não usam a propriedade de paleta de ambiente, enviarão mensagens WM_QUERYNEWPALETTE e WM_PALETTECHANGED. Um controle pode substituir OnQueryNewPalette e OnPaletteChanged, lidar com essas mensagens.

Níveis de segurança e comportamento de controle do navegador Internet Explorer

Um navegador tem opções para nível de segurança configuráveis pelo usuário. Como as páginas da Web podem ter um conteúdo ativo que pode prejudicar potencialmente o computador de um usuário, os navegadores permitem que o usuário selecione opções para nível de segurança. Dependendo da maneira como um navegador implementa os níveis de segurança, um controle pode não ser baixado ou exibirá um certificado ou uma mensagem de aviso para permitir que o usuário escolha, em tempo de execução, se deseja ou não baixar o controle. O comportamento dos controles ActiveX em níveis de segurança altos, médios e baixos no Internet Explorer está listado abaixo.

Modo de Segurança de Alto Nível

  • Os controles não assinados não serão baixados.

  • Os controles assinados exibirão um certificado, se não forem confiáveis (um usuário pode escolher a opção de sempre confiar no código desse proprietário de certificado a partir de agora).

  • Somente os controles marcados como seguros terão dados persistentes e/ou poderão receber script.

Modo de Segurança de Nível Médio

  • Os controles não assinados exibirão um aviso, antes do download.

  • Os controles assinados exibirão um certificado, se não forem confiáveis.

  • Os controles não marcados como seguros exibirão um aviso.

Modo de Segurança de Baixo Nível

  • Os controles são baixados sem aviso.

  • O script e a persistência ocorrem sem aviso.

Confira também

Tarefas de programação da Internet no MFC
Noções básicas de programação da Internet no MFC
Controles ActiveX do MFC: licenciando um controle ActiveX