Pessoal
Eu tinha o seguinte problema:
Precisava, a partir de uma aplicação Swing, executar alguns aplicativos nativos da plataforma Windows. Alguns exemplos eram lançar applicativos do MS Office, e aplicativos de outros fabricantes de maneira geral.
Então, normalmente um simples Runtime.getRuntime().exec("c:\caminho\app.exe") resolveria, mas eu precisava que a solução fosse mais completa. Podendo por exemplo descobrir se o MS Office estava instalado na máquina além de coletar outras informações diversas a respeito do ambiente desktop em questão.
Então a minha primeira idéia foi usar JNI para realizar operações através da API do próprio Windows ou coletar todas as informações de ambiente que eu precisava no Registro do SO. Só que a minha app é distribuida via Java Web Start e madar DLLs junto com ela não deixaria meus usuários muito felizes. Eu menos ainda.
Aí, na falta de uma alternativa melhor eu implementei a seguinte solução:
Criei um mini-framework capaz de ler dados do registro do Windows que não usa JNI. Ele se baseia em chamadas de linha de comando do SO que pesquisam o registro e retornam o resultado no console, de onde eu o capturo e interpreto.
Ele constrói linhas de comando como:
C:[code]
C:\>reg query HKEY_LOCAL_MACHINE\Software\Microsoft\Office
! REG.EXE VERSION 3.0
HKEY_LOCAL_MACHINE\Software\Microsoft\Office
HKEY_LOCAL_MACHINE\Software\Microsoft\Office\11.0
HKEY_LOCAL_MACHINE\Software\Microsoft\Office\8.0
HKEY_LOCAL_MACHINE\Software\Microsoft\Office\9.0
HKEY_LOCAL_MACHINE\Software\Microsoft\Office\Common
HKEY_LOCAL_MACHINE\Software\Microsoft\Office\Delivery
HKEY_LOCAL_MACHINE\Software\Microsoft\Office\Outlook
HKEY_LOCAL_MACHINE\Software\Microsoft\Office\PowerPoint
Aí, eu interpreto o resultado com um parser muito simples que eu montei e construo uma arvorezinha de objetos RegistryKey e RegistryValue que representam as chaves e os respectivos valores.
Então, com base neste mini-framework eu vou construir classes que coletam informações no registro a respeito de vários aplicativos que estão ou não instalados na máquina para lançar eles ou fazer outras coisas.
E estas classes podem ser usadas também como parte de uma implementação de integração multi-plataforma que verifica em que plataforma a app está rodando e investiga o ambiente usando este mini-framework ou alguma outra estratégia para as plataformas não Microsoft.
A implementação mencionada funciona, a princípio, com qualquer Win XP, NT ou 2000, pois pelo que sei, todos eles tem o comando 'reg'.
:?: Quem achou a idéia tosca?
:?: Alguém usaria isso?
:?: Coloco no Source Forge?
