Bom dia, quero fazer com que dados que serão obtidos através de uma interface java sejam enviados para um arquivo .bat, que lerá os dados e iniciará o processo.
O problema que tenho que resolver é o seguinte:
Quero iniciar uma conexão VPN com o OpenVPN com o seguinte comando.
Arquivo: start.bat
cd %PROGRAMFILES%\OpenVPN\config
openvpn --config client.ovpn
Mas, não quero utilizar a interface do PROMPT-DOS, então quero que o bytecode resgate os dados digitados pelo usuários através desta interface JAVA e que inicie o arquivo .bat com estes dados.
[quote=chicogodoy.evo]Legal, gostei das propostas, agora ja sei que é possível fazer o que eu estou pensando.
Mas quando compilo e executo a Classe do OliveirakunJava, nada acontece, estou utilizando o eclipse.[/quote]
Vc deve colocar o caminho do arquivo na variável bat. O arquivo .bat vai ser executado em modo silencioso(sem aparecer a janela do prompt do ms-dos), se vc quiser ver a janela para ter certeza de que o arquivo foi executado basta retirar o parâmetro /B na linha: ("cmd /c start /B "+bat)
Não dá, pois quando executo este client.ovpn entre em uma instância do OpenVPN.
Ou seja, as próximas linhas de comando só serão executadas após o término da instância.
Ex.:
tenho um .bat seguinte:
=============== INICIO BAT ===============
cd %PROGRAMFILES%\OpenVPN\config
openvpn --config client.ovpn [color=red]// Aqui executo o arquivo (dentro desta execução o PROMPT me pede usuário e senha).[/color]
usuario [color=red]// Ao executar esta linha estou fora do arquivo.[/color][color=red] [/color]
senha [color=red]// Ao executar esta linha estou fora do arquivo.[/color][color=red] [/color]
=============== FIM BAT ===============
[quote=chicogodoy.evo]
Preciso inserir um usuário e senha que o usuário irá digitar na execução do arquivo.
É possível?[/quote]
É sim mas é um pouco mais complicado. O comando Runtime.getRuntime.exec() retorna um processo, vc vai ter que pegar esse processo retornado e abrir um stream de entrada e saida para ler e enviar dados, muito parecido com sockets. Vai ficar mais ou menos assim:
Process pr = Runtime.getRuntime().exec("cmd /c start /B "+bat);
PrintStream output = new PrintStream(pr.getOutputStream());
Scanner scanner = new Scanner(pr.getInputStream());
output.println("User");//escrevendo dados no stream
System.out.println(scanner.nextLine());//imprimindo a saida dos dados
O ideal é vc criar uma thread separada para ler a saida dos dados e enviar os comandos pela thread principal, se vc ja trabalhou com sockets não vai ter problemas.
Lina, tenta executar o código que eu postei mas sem o parâmetro /B na linha do runtime.exec(), dessa forma a janela de prompt aparecerá na tela. No caso essa linha ficaria dessa forma: