getRuntime().exec() path internacional para WORD [resolvido]

10 respostas
A

Bom Dia todos!

Estou desenvolvendo um sistema para Holanda que precisa abrir o word.
Já sei que com getRuntime().exec() consigo fazer isso. O problema é o path, como saber qual o caminho instalado o word, tipo, aqui no Brasil comumente veremos o caminho “C:/Arquivos de programas/Microsoft Office/OFFICE11/WINWORD.EXE” mas o usuário poderia instalar em outro caminho, e também, obviamente na Holanda o caminho é outro!
Então, será que existe um alias para WINWORD.EXE? Como posso garantir sempre pegar o caminho correto em qualquer lugar do mundo?!!!
Alguma sugestão?
Muito obrigada!

10 Respostas

rodrigo_gomes

Olá,

em algum ponto de sua aplicação, vc nao poderia perguntar isso pro usuário?

T

Você precisa chamar o Word “vazio” ou então passando o nome de um documento? Se puder passar o nome de um documento, sempre dá para executar o comando do Windows (obviamente via exec()):

rundll32.exe Shell.dll,ShellExec_RunDLL “C:<i>diretório<i>o documento que você quer abrir.doc”

(isto chama automaticamente a aplicação registrada para arquivos .doc, que provavelmente é o MS Word. Se for o OpenOffice vai chamar o OpenOffice. Portanto você nem precisa saber se é o Office 2003, Office 2000, Office XP, Word 6.0 - mande tudo às favas)

EDIT - sorry, é shell32.dll, não shell.dll :stuck_out_tongue:
Então:
rundll32.exe Shell32.dll,ShellExec_RunDLL “C:<i>diretório<i>o documento que você quer abrir.doc”

R

Usamos o alis winword em iniciar>executar>winword

pek

Nunca fiz isto nem sei se é possivel com java, mas em ambiente windows poderá obter o caminho do word através do registo do próprio windows, fazendo uma pesquisa por uma string do género “SOFTWARE\JavaSoft\Java Runtime Environment” e um parametro “JavaHome” (neste exemplo para a localizacao do JRE).

A grande questão será como fazer esta pesquisa usando Java.

T

A vantagem da solução “rundll32” que lhe mostrei é que você não precisa saber qual é a versão do Office instalada na máquina do sujeito. Se ele nem tiver o Office, mas apenas o WordPad, continua funcionando e mostrando o documento.
Se você não puder iniciar o Office com um documento, você pode criar um documento vazio default, e iniciar o Office com esse documento vazio. Aí o problema é saber onde é que você tem de criar esse documento vazio (transferi o seu problema de descobrir onde é que está o “Program Files” para o problema de descobrir onde está o “My Documents” - he he he…
Mas isso acho que é mais fácil, pois provavelmente o seu aplicativo já deve ter um padrão para o diretório de criação de documentos.

A

Sim thingol, gostei desta solução, me parece bem adequada para meu problema.
Porém fui testá-la e ocorreu os seguintes erros:

“O aplicativo ou a Dll C:\WINDOWS\system32\Shell.dll não é uma imagem válida para o windows. Compare com o disco de instalação.”

“Erro ao carregar Shell.dll %1 não é um aplicativo Win32 válido.”

o comando que fiz foi:
String caminho = “rundll32.exe Shell.dll,ShellExec_RunDLL C:\teste\Arquivo.doc”
Runtime.getRuntime().exec(caminho);

OBS.: O Arquivo existe no local especificado.

Se puder me ajudar agradeço muito!

Lauricio
Acredito que o problema esteja somente nas barras duplas, ao invés de simples, pois testei e funcionou, inclusive vinculando o ".doc" ao wordpad.

        String comando = "C:\\temp\\xxx.doc";
        Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL "+comando);
A

Maravilha!!!
Funcionou colocando as barras duplas.

Valeuuuuu todos!!!

E

Nunca fiz isto nem sei se é possivel com java, mas em ambiente windows poderá obter o caminho do word através do registo do próprio windows, fazendo uma pesquisa por uma string do género “SOFTWARE\JavaSoft\Java Runtime Environment” e um parametro “JavaHome” (neste exemplo para a localizacao do JRE).

A grande questão será como fazer esta pesquisa usando Java.

Só respondendo, pela API de preferences (java.util.pref) acho que dá pra fazer…esse tipo de informação é obtida do registro como preferência do sistema, mas, se não me engano, essa API depende de restrições do SO (usuário deve ter permissão de acesso ao registro)

T

Infelizmente java.util.Preferences não acessa o Registry inteiro, só um pedacinho dele, cujas chaves são criadas pela classe Preferences, e é mais apropriada para guardar alguma configuração de alguma aplicação do usuário.

Criado 1 de junho de 2005
Ultima resposta 1 de jun. de 2005
Respostas 10
Participantes 7