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:
1 2 3 4 5 6 7 8 9 10 11 |
<script type="text/javascript"> function RunEXE() { try { var oShell = new ActiveXObject("WScript.Shell"); // Só funciona se alterar as configurações de segurança do IE var prog = "c:\\Windows\\Notepad.exe"; oShell.Run('"' + prog + '"', 1); } catch (e) { console.log(e); } } </script> |
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.