Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 “https://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 “https://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:
https://msdn.microsoft.com/en-us/library/bb250462(VS.85).aspx
Comments
Anonymous
January 25, 2013
Perfeito. Foi isso mesmo que aconteceu aqui. Seu tutorial resolveu o meu problema... parabéns.Anonymous
June 28, 2013
Obrigado Luís! Resolveu meu problema também!Anonymous
July 18, 2013
Sensacional! Fico feliz que tenha ajudado. :)Anonymous
November 05, 2013
Muitíssimo obrigado. resolveu meu problema já estava ficando maluco.Anonymous
November 27, 2014
Mandou muito bem!Anonymous
February 11, 2015
Luis, estava a dias procurando essa solução. Obrigado pela ajuda.Anonymous
September 01, 2015
Cara, muito obrigado.