Pessoal, meu problema é o seguinte,
desenvolvi uma aplicação java bem simples, que monta um menu a partir de um txt, o qual contem o nome(Label do item do menu) e o caminho(que eu executo usando Runtime.getRuntime.exec() ).
Pois bem, as aplicações em geral funcionam tranquilamente, mas quando se trata de uma aplicação java, a coisa fica um pouco diferente.
Mesmo colocando o “java -jar …” ele não executa lá dentro do meu servidor, mas executado na minha máquina com exatamente o mesmo caminho, ele executa.
Já considerei a possibilidade de ser alguma variável de sistema faltando, mas o mais estranho é que se eu abrir o prompt lá no servidor(onde a aplicação não roda) e digitar o caminho que está no txt, ele executa a aplicação java…
Já gastei os testes que eu tinha pessoal, aguardo sugestões.
Camarada, eu fiz alguns testes aqui e consegui o seguinte.
Classe que chama:
package main;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
File f = new File(".");//local onde será criado o prompt
Process proc = null;
try {
proc = Runtime.getRuntime().exec("cmd", null, f);
} catch (IOException e) {
e.printStackTrace();
}
if (proc != null) {
BufferedReader in = new BufferedReader(new InputStreamReader(
proc.getInputStream()));
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(proc.getOutputStream())), true);
out.println("cd diretorio");//acessando o diretório que preciso, caso esteja abaixo, utilize cd .. até chegar no nível de acesso ao outro
out.println("exec");//nome do .bat
try {
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
proc.waitFor();
in.close();
out.close();
proc.destroy();
} catch (Exception e) {
e.printStackTrace();
}
}
}
E a classe que é executada
package main;
import java.io.File;
import javax.swing.JOptionPane;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
File f = new File(".");
String caminho = f.getAbsolutePath();
JOptionPane.showMessageDialog(null, caminho);
}
}
Fiz o seguinte, criei um jar com a primeira, em meus documentos. Depois, criei a pasta “diretorio” e nela coloquei o jar com a segunda classe e o bat chamado exec.bat, que só executa
java -jar chamado.jar
Fui ao prompt de comando, executei, dentro de meus documentos
java -jar chama.jar
E aguardei, a saída trouxe o JOptionPane, com o diretório correto.
Cara, eu já descobri o problema, só falta a solução.
Os programas do servidor que eu estou tentando executar estão em uma unidade de rede.
Fiz um teste utilizando a aplicação que desenvolvi e ela não consegue executar NADA do que está nessa unidade de rede, nem mesmo um bloco de notas que fiz para testar.
Mas ainda assim, se eu tento executar utilizando o prompt, tá saíndo tranquilo.
Então cara depois de isolar o problema na unidade de rede, eu percebi o seguinte.
Essa minha aplicação é aberta no Terminal Service, utilizando uma das opções do Windows Server que, ao invés de inicializar a interface padrão do Windows, inicializa com algum programa a sua escolha.
Dessa forma, a unidade de rede não é mapeada, por isso não consigo acessá-la…
Comentaram comigo que existe um comando do prompt mesmo para mapear uma unidade de rede, alguém aí sabe?
Mais uma vez obrigado à galera que parou um pouco pra tentar me ajudar ae.
Não cara, eu não sei mesmo qual é o comando nem como devo utilizá-lo, poderia me dizer, por exemplo, como faria para criar uma unidade de rede X: a partir do ip 10.1.1.1?
Olha, quase funcionou, só que eu preciso que esse mapeamento seja persistente, pois senão na hora de executar os programas o mapeamento não está mais funcionando, sabe como fazer?
Verifiquei a parte de /persistent do comando, e até consegui criar um mapeamento persistente, porém não consigo fazê-lo persistente se eu especificar a senha na linha de comando, por exemplo :
net use A: \10.1.1.1\teste senha -> faz o mapeamento sem pedir senha do servidor 10.1.1.1
net use A: \10.1.1.1\teste senha /persistent:yes eh isso aqui mais ou menos que eu quero fazer, soh que a sintaxe nao eh essa…