Problemas de Automação no Internet Explorer 8.0


Nessa semana me deparei com uma aplicação desenvolvida em Visual Basic 6.0 que gerava o seguinte erro quando a aplicação tentava navegar para uma página da Intranet para capturar informações do site:

-2147023179

Erro de automação (Automation error)

Interface desconhecida
(The interface is unknown).

Diagnóstico

Ao fazer o debug do código, foi possível identificar que o erro ocorria quando a aplicação tentava acessar os sites que pertenciam à zona da Intranet. Nenhum erro ocorria quando a aplicação acessava os sites associados à zona da Internet. Uma das diferenças entre essas zonas é que os sites da Intranet não possuem o Modo Protegido habilitado por padrão.

O modo protegido ajuda a proteger usuários contra ataques executando o processo do Internet Explorer com privilégios muito restritos. Quando executado no modo protegido, o IE8 é um processo de baixa integridade sem acesso de gravação a arquivos e chaves do registro.

O Internet Explorer 8 possui pelo menos dois processos (Figura 1) quando é executado em uma máquina que possui o UAC (Controle de Conta de Usuário) configurado no nível padrao. O processo do navegador (Frame Manager) e um ou mais processos (Tab Process) que podem ser executados nos seguintes níveis de integridade:

•Modo de Integridade Baixo (LowIL) para os sites de modo protegido

•Modo de Integridade Médio (MediumIL) para sites da Intranet/confiáveis

•Modo de Integridade Alto (HighIL) se o IE for iniciado como Admin

 

Figura 1 - Modelo conhecido como Loosely Coupled IE (LCIE)

O Internet Explorer 8 assume que o processo da aba padrão deve ser executado no modo de baixa integridade (LowIL). Dessa forma, quando o IE é criado via automação COM, a tab padrão é executada no modo de baixa integridade (veja o fragmento de código a seguir).

Dim IE As InternetExplorer


Set IE = CreateObject("InternetExplorer.Application")

IE.Navigate2 “http://intranet/”

 

Se o navegador determinar que a navegação requer que um processo (Tab Process) seja executado no modo de integridade média, o navegador faz a troca da aba virtual. O problema da automação ocorre porque o script ou código que criou a instância do Internet Explorer via automação permanece com uma referência anterior (irrelevante) para o processo da aba atual, ou seja, ele perde o controle.

Solução

A primeira solução é habilitar o modo protegido do Internet Explorer para os sites da Intranet.

Figura 2 - Habilitar o Modo Protegido para os sites da Intranet

Outra solução requer alteração no código da aplicação , conforme exibido no fragmento de código a seguir:

Dim IE As InternetExplorer

Set IE = CreateObject("new:{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E}")

IE.Navigate2 “http://intranet/”

Ao utilizar o CLSID a aplicação cria uma instância do Internet Explorer no modo de integridade médio (MediumIL). A lógica é bem simples e pode ser verificada através da chave de registro HKEY_CLASSES_ROOT\CLSID\{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E}\LocalServer32 que contém a REG_EXPAND_SZ com o
valor "%ProgramFiles(x86)%\Internet Explorer\iexplore.exe" –startmediumtab.

Fontes:

http://msdn.microsoft.com/en-us/library/bb250462(VS.85).aspx

 

Comments (7)

  1. Carlos Ferreira says:

    Perfeito. Foi isso mesmo que aconteceu aqui.

    Seu tutorial resolveu o meu problema… parabéns.

  2. Daniel Santos says:

    Obrigado Luís! Resolveu meu problema também!

  3. Sensacional! Fico feliz que tenha ajudado. 🙂

  4. Gilberto says:

    Muitíssimo obrigado.

    resolveu meu problema já estava ficando maluco.

  5. Carlos Barros says:

    Mandou muito bem!

  6. Danilo Piconi says:

    Luis, estava a dias procurando essa solução. Obrigado pela ajuda.

  7. Gangrel says:

    Cara, muito obrigado.

Skip to main content