Compartilhar via


Atualizando um controle ActiveX existente

Controles ActiveX existentes (anteriormente controles OLE) podem ser usados na Internet sem modificação. No entanto, talvez você queira modificar controles para melhorar o desempenho deles.

Importante

O ActiveX é uma tecnologia herdada que não deve ser usada para o novo desenvolvimento. 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 tem suporte para navegadores modernos. A Microsoft não fornece mais componentes ActiveX acessíveis à 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 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 de .cab assinado. Você pode marcar seu 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.

Código de pacote para download

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

A Marca CODEBASE

Os controles ActiveX são inseridos em páginas da Web usando a <OBJECT> marca. O CODEBASE parâmetro da <OBJECT> marca especifica o local 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"

Essa solução baixa apenas o arquivo .ocx do controle e exige que as DLLs de suporte já estejam instaladas no computador cliente. Isso funcionará para controles ActiveX do Internet Explorer e 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á.

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 sobre assinatura de código).

Usando a tag 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 controles ActiveX que usam 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 download mais rápido. Se você estiver usando um arquivo .cab para download de componente, será mais rápido assinar todo o arquivo .cab do que cada componente individual.

Criação de arquivos 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 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 controlador.

Para obter detalhes sobre como criar um arquivo CAB, consulte Criando 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 <OBJECT> etiqueta para empacotar o controle de amostra 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 Marca de Versão

Observe aqui que a #Version informação especificada por meio de um arquivo CAB se aplica ao controle especificado pelo parâmetro CLASSID da <OBJECT> tag.

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

Marcando um controle como seguro para scripts e para 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 um computador diretamente.

Os controles podem ser marcados como seguros para scripts e seguros para 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 ser scriptados 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 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 {06889605-B8D0-101A-91F1-00608CEAD5B3} pela ID de classe do seu controle) para associar suas chaves à 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, verifique se o contrato de licença permite seu uso na Internet e crie um LPK (arquivo de pacote de licença) 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 em que o controle foi criado, mas ele 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 verificar se a licença para o controle permite:

  • Redistribuição

  • Uso do controle na Internet

  • Uso do parâmetro Codebase

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 sua página HTML. Na página HTML, insira uma <tag OBJECT> para o objeto Gerenciador de Licenças antes de qualquer outra <tag OBJECT>. O Gerenciador de Licenças é um controle ActiveX instalado com o Internet Explorer. Sua ID de 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 Edição Mascarada da Microsoft é mostrada abaixo. A ID da primeira classe é para o controle Gerenciador de Licenças, a ID da segunda classe é para o controle Editar Mascarado. Altere as etiquetas para apontar para o caminho relativo do arquivo .lpk que você criou anteriormente e adicione uma etiqueta de objeto, incluindo a ID da classe para o seu controle.

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

    Se o seu controle puder ser exibido em outros navegadores habilitados para Active, por exemplo, o Netscape com o plug-in NCompass ActiveX, você deve 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 o licenciamento de controle, consulte Controles ActiveX: Licenciando um controle ActiveX.

Código de assinatura

A assinatura de código foi projetada 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, caso em que o código assinado por aqueles confiáveis será baixado sem aviso prévio. O código é assinado digitalmente para evitar adulteração.

Verifique se o código final está assinado para que seu 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 no SDK do ActiveX e consulte Como assinar 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 de assinatura ou a empresa. 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. Esse hash é comparado posteriormente 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 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 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 impede a cintilação na tela e garante 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.

Contêineres mais antigos que não usam a propriedade de paleta de ambientes enviarão mensagens WM_QUERYNEWPALETTE e WM_PALETTECHANGED. Um controle pode substituir OnQueryNewPalette e OnPaletteChanged para manipular essas mensagens.

Comportamento de controle e níveis de segurança do navegador Internet Explorer

Um navegador tem opções para o nível de segurança, configurável pelo usuário. Como as páginas da Web podem conter conteúdo ativo que pode prejudicar potencialmente 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 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 de certificado a partir de agora).

  • Somente os controles marcados como seguros terão dados persistentes e/ou poderão ser programados por scripts.

Modo de Segurança Média

  • Os controles não assinados exibirão um aviso antes de baixar.

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

  • Controles não marcados como seguros exibirão um aviso.

Modo de segurança baixo

  • Os controles são baixados sem aviso.

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

Consulte também

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