Partilhar via


Atualizando um controle ActiveX existente

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

Importante

ActiveX é uma tecnologia herdada que não deve ser usada para novos desenvolvimentos. Para obter mais informações sobre tecnologias modernas que substituem o ActiveX, consulte Controles ActiveX. O suporte para controles ActiveX foi preterido em versões posteriores do Internet Explorer e não é suportado por navegadores modernos. A Microsoft não fornece mais componentes ActiveX acessíveis pela Web.

Ao usar seu controle em uma página da Web, há considerações adicionais. O arquivo .ocx e todos os arquivos de suporte devem estar na máquina 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 de .cab assinado. Você pode marcar seu controle como seguro para script e como seguro para inicialização.

Este artigo aborda 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.

Código de pacote para download

Para obter mais informações sobre esse assunto, consulte Empacotando controles ActiveX.

A tag CODEBASE

Os controles ActiveX são incorporados em páginas da Web usando a <OBJECT> marca . O CODEBASE parâmetro da <OBJECT> tag especifica o local a partir do qual baixar o controle. CODEBASE pode apontar para vários tipos de arquivo diferentes com êxito.

Usando a tag CODEBASE com um arquivo OCX

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

Esta solução baixa apenas o arquivo .ocx do controle e requer que todas as DLLs de suporte já estejam instaladas na máquina cliente. Isso funcionará para controles ActiveX do Internet Explorer e MFC criados com o Visual C++, porque o Internet Explorer é fornecido com as DLLs de suporte para controles Visual C++. Se outro navegador da Internet compatível com controle ActiveX for usado para exibir esse controle, essa solução não funcionará.

Usando a tag CODEBASE com um arquivo INF

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

Um arquivo .inf controlará a instalação de um .ocx e seus arquivos de suporte. Esse método não é recomendado porque não é possível assinar um arquivo .inf (consulte Código de assinatura para ponteiros na assinatura de código).

Usando a tag CODEBASE com um arquivo CAB

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

Os arquivos de gabinete são a maneira recomendada de empacotar controles ActiveX que usam MFC. Empacotar um controle ActiveX 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 MFC). O uso de um arquivo CAB compacta automaticamente o código para um download mais rápido. Se você estiver usando um arquivo .cab para download de componentes, é mais rápido assinar todo o arquivo .cab do que cada componente individual.

Criando ficheiros CAB

As ferramentas para criar arquivos de gabinete agora fazem parte do SDK do Windows.

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

Para obter detalhes sobre como criar um arquivo CAB, consulte Criando um arquivo CAB.

Ficheiro INF

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

O exemplo a seguir ilustra o uso da tag <OBJECT> para empacotar o controlo de exemplo 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>

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 -s 6144 parâmetro reserva espaço no gabinete para assinatura de código.

A tag de versão

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

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

Marcando 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 seguros para inicialização se forem de fato seguros. Um controle seguro não executará a E/S do disco nem acessará a memória ou os registros de uma máquina diretamente.

Os controles podem ser marcados como seguros para scripts e seguros para inicialização através 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 (Globally Unique Identifiers) para seu controle para marcá-lo seguro para scripts e persistência. Os controles que podem ser executados com script com segurança conterão uma entrada do 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 do Registro semelhante a:

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

Adicione entradas semelhantes às seguintes (substituindo o {06889605-B8D0-101A-91F1-00608CEAD5B3} pelo ID de classe do seu controlo) para associar as suas chaves ao seguinte ID de 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, você deve verificar se o contrato de licença permite seu uso na Internet e criar um arquivo de pacote de licença (LPK) para ele.

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 usando o controle será carregada corretamente no computador onde o controle foi criado, mas não será carregada em um computador diferente, a menos que as informações de licenciamento sejam incluídas.

Para usar um controle ActiveX licenciado no Internet Explorer, você deve verificar o contrato de licença do fornecedor para verificar se a licença para o controle permite:

  • Redistribuição

  • Utilização do controlo na Internet

  • Uso do parâmetro Codebase

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

Para criar um arquivo LPK

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

  2. Na caixa de diálogo License Package Authoring Tool , 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 & Exit e digite um nome para o arquivo LPK. Isso criará o arquivo LPK e fechará o aplicativo.

Para incorporar um controle licenciado em uma página HTML

  1. Edite sua página HTML. Na página HTML, insira uma <tag OBJECT> para o objeto License Manager antes de qualquer outra <tag OBJECT> . O Gestor de licenças é um controlo ActiveX instalado com o Internet Explorer. Seu ID de classe é mostrado abaixo. Defina a propriedade LPKPath do objeto License Manager 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 <tag OBJECT> para seu controle licenciado após a tag License Manager.

    Por exemplo, uma página HTML que exibe o controle Microsoft Masked Edit é mostrada abaixo. O ID de primeira classe é para o controle License Manager, o ID de segunda classe é para o controle Masked Edit. Altere as tags para apontar para o caminho relativo do arquivo .lpk criado anteriormente e adicione uma tag de objeto incluindo a ID de classe para seu controle.

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

    Se o seu controlo for visualizado em outros navegadores compatíveis com ActiveX — por exemplo, o Netscape usando o plug-in ActiveX NCompass — deve adicionar a sintaxe <EMBED> como 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, consulte Controles ActiveX: Licenciando um controle ActiveX.

Código de assinatura

A assinatura de código é projetada para identificar a fonte do código e garantir que o código não tenha sido 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, caso em que o código assinado por esses confiáveis será baixado sem aviso prévio. O código é assinado digitalmente para evitar adulterações.

Verifique se o código final está assinado para que o controle possa ser baixado automaticamente sem exibir mensagens de aviso de confiança. Para obter detalhes sobre como assinar código, verifique a documentação sobre Authenticode no ActiveX SDK e consulte Assinando 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 empresa signatária. Se o nível de segurança for nenhum, ou se o proprietário do certificado do controle assinado for confiável, nenhum certificado será exibido. Consulte Níveis de segurança do navegador e comportamento de controle do 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 garantia de assinatura digital não foi alterado desde que foi assinado. Um hash do código é obtido e incorporado no certificado. Esse hash é posteriormente comparado com um hash do código obtido depois que o código é baixado, mas antes de ser executado. Empresas como a Verisign podem fornecer chaves privadas e públicas necessárias para assinar código. O ActiveX SDK é fornecido com o MakeCert, um utilitário para criar certificados de teste.

Gerenciando a paleta

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

Um controle pode substituir OnAmbientPropertyChange para manipular 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 utilizam o valor de retorno para determinar se um controlo é compatível com paletas.

De acordo com as diretrizes do OCX 96, um controle deve sempre realizar sua 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 controlo pode sobrescrever OnQueryNewPalette e OnPaletteChanged para manipular essas mensagens.

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

Um navegador tem opções de nível de segurança, configuráveis pelo utilizador. Como as páginas da Web podem conter conteúdo ativo que pode danificar o computador de um usuário, os navegadores permitem que o usuário selecione opções para o 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 Alta Segurança

  • 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 uma opção para sempre confiar no código desse proprietário do certificado a partir de agora).

  • Somente os controles marcados como seguros terão dados persistentes e/ou serão programáveis.

Modo de Segurança 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 baixa segurança

  • Os controles são baixados sem aviso.

  • A execução de scripts e a persistência ocorrem sem aviso.

Ver também

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