Dev (Back & Front)ARTIGO

Web abrindo aplicações locais

 

Olá, pessoal! Estava no trabalho
precisando fazer um portal de produtos criados pela empresa, para ficar mais fácil
centralizar tudo. O usuário entra na intranet, loga apenas uma vez
e abre os programas que quiser. Porém, bati a cabeça na porta quando percebi
que a maioria dos produtos são locais, isto é, funcionam localmente na máquina
do usuário e precisam ser instalados para o devido funcionamento. Bati com a cabeça na parede também
por perceber que ainda existem programas feitos com a linguagem VB 6.0, Delphi,
DOS e outros além de C#.NET.

Referências:

Ferramenta de
desenvolvimento: Visual Studio .NET 2008

Linguagem:
C#.NET

Linguagem
Script: JavaScript

Framework 3.5

 

Além das referências acima, o código
pode ser feito em qualquer ferramenta do Visual Studio .NET, uma mais nova ou
mais antiga sem problema. Isso serve também para o framework.

Continuando a história, estava com
problemas, pois precisava passar usuário e senha para que não fosse necessário logar
novamente dentro do aplicativo. A idéia foi a seguinte: o usuário loga no
portal e, com isso, todos os sistemas aparecem pra ele, de acordo com as
permissões. Ao clicar em um programa, o software local aparece com a tela
correta e logado.

Lembrando que cada software precisa
de usuário e senha. Ficou bem complicado fazer com que esse portal funcionasse,
porém a empresa só usa IE, o que ficou mais específico. É muito
importante fazer software web que funcione em todos os browsers, mas já que a
empresa usa apenas IE, aproveitei!

Tive que fazer uma alteração nos
aplicativos para receber usuário e senha, ou seja, o arquivo.exe recebe usuário
e senha criptografados para logar automaticamente.

Na prática

Pesquisando na internet e estudando
sobre a linguagem C#.NET, vi que o portal fica na intranet e os
aplicativos ficam localmente. Portanto, não posso usar o Process.Start ou
qualquer outro comando do C#.NET, porque não existe software instalado no
servidor, e sim na máquina. Tive que passar para a linguagem script, VBScript ou
JavaScript. Achei um código que verifica um caminho específico via javascript e
funciona apenas no Internet Explorer:

 <script type="text/javascript" language="javascript"><br /><br />        function AbreAplicacao(caminho, tipo, usuario, senha) {<br /><br />            var fso = new ActiveXObject('Scripting.FileSystemObject');<br /><br />            var WshShell = new ActiveXObject('WScript.Shell');<br /><br />            if (fso.FileExists(caminho))<br /><br />                WshShell.Exec(caminho+' '+tipo+' ' + usuario+ ' ' +senha);<br /><br />            else<br /><br />                alert('A aplicação não está instalada neste computador.')<br /><br />        }<br /><br />    </script>

Referência: Code
1.1

Em resumo, o código usa ActiveX e
acessa o FileSystemObject. Depois disso, uso o WScript.Shelll, se no
FileSystemObject existir o arquivo que mandei como caminho na função, ele chama
passando os parâmetros, caso contrário exibe um alerta na tela falando que a
aplicação não está instalada.

No primeiro momento, chamando a
função passando os dados via javascript funcionou perfeitamente. Agora o
desafio seria executar o mesmo dado pela linguagem C#.NET na plataforma
ASP.NET.

Tentei de tudo, mas não estava dando
certo. Resumindo, o que deu certo foi criar um Label <asp:label…>
dentro da página chamando a função javascript:

//colocar no final da página<br /><br /><asp:Label ID="lblScript" runat="server"></asp:Label><br /><br /><br /><br />                    string comando = @"<script>AbreAplicacao('C:\\Caminho da Aplicacao\\Arquivo.exe','DIGITACAO','usuario','senha')</script>";<br /><br />                    lblScript.Text = comando;

Referência: Code
1.2

Assim, mesmo a página web estando no
servidor, chama uma aplicação que está localmente na máquina do usuário.
Resolveu o meu problema perfeitamente. É lógico que existe uma regra específica
para o tipo da aplicação que não mostrei aqui, mas o importante é que você
pode usar o código explicado acima para chamar aplicativos dentro do seu
computador.

Lembrando que só funciona se o site
tiver HTTPS e no Internet Explorer.

Fico por aqui,
espero que tenha gostado.

Com mais de 20 anos trabalhando no mercado de tecnologia. Mestre em Engenharia Elétrica voltada para o mundo mobile, com mais de 20 livros publicados e cerca de 700 artigos publicados com intuito de ajudar àqueles que querem aprender a programar (site, software, desktop, serviços, api e mobile). Site pessoal: https://www.mauriciojunior.net - MVP, MCAD, MCP Microsoft

Ver perfil