Como abrir arquivos do client a partir de uma página web usando ActiveX.

O Cenário

Esta semana recebi uma demanda que dizia o seguinte: O cliente gostaria de ter dois links na sua home page, uma para abrir o Outook (sim, o Microsoft Outlook) e outro para abrir um client do SAP (é um arquivo EXE).

Meu sangue subiu, e na mesma hora esbravejei: – Isso não é possível! A web não permite isso, se permitisse, qualquer site da web teria acesso a qualquer arquivo de qualquer computador, eu estava certo, ou parcialmente certo, depende do ponto de vista.

Como o cliente usa Sharepoint, via de regra tem que usar o Internet Explorer, então minha solução foi direcionada a duas coisas: Silverlight ou ActiveX. Obviamente repudiei as duas ideias, mas o cliente é quem manda né, então lá vai eu “prostituir” meus princípios de desenvolvedor.

 

O Problema

Silverlight tem perfeitas condições de realizar isso, basta que a aplicação rode “Out-Of-Browser”, ou seja, esta opção é inválida pra meu caso. Pesquisei sobre ActiveX e achei um trechinho de código javascript, bem simples e que NÃO funciona, calma, eu explico o porque não funciona. O código é o seguinte:

Vai lá, tenta rodar ai, você vai ver a seguinte mensagem de erro:

Error: Automation server can’t create object

Isso é bom, se este erro não ocorresse, qualquer página poderia executar qualquer ActiveX e você estaria com sérios problemas de segurança. Não precisamos entrar na discussão do problema que é abrir esta brecha né?

 

A “Solução”

A “solução” aqui é apresentada com aspas mesmo, porque este “problema” (que não é um problema) não tem solução, tem é gambiarra, que um programador digno não deveria fazer, mas se o cliente quer, quem é você pra argumentar? Se ele quer abrir uma falha de segurança tremenda no seu site, deixa ele, cabe a nós explicar os perigos disso.

Então, para você não ver mais a mensagem de erro do Automation server e conseguir abrir um arquivo do client você precisa ir nas configurações do IE, e adicionar seu site a zona  trusted.

Em seguida, na aba security mesmo, clique em Custom Level e procure a opção “Initialize and script ActiveX controls not marked as safe for scripting”.

Rode o javascript de novo, sua chamada ActiveX vai funcionar, alias, a sua e a de qualquer outro script, seja ele do bem ou do mal.