ProcessBuilder ne fonctionne pas à partir d'un serveur weeb

DeadPool33 Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   -  
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

J'essai d'exécuté un .EXE externe à partir de mon server web.

mon code fonctionne super bien lorsque je roule mon code en local ,mais
lorsque je le déploie sur mon server, l'exécutable ne fonctonne pas.

J'ai tenter de mondifier les variables d'environnement du ProcessBuilder mais sans succes.

Je suis à court d'idée..

Merci de bien vouloir m'aider

voici le code que j'utilise et qui fonctionne en local :


try{
ProcessBuilder processBuilder = new ProcessBuilder("pathtoExe\\executable.exe");
processBuilder.redirectErrorStream(true);
processBuilder.redirectOutput();
processBuilder.redirectInput();
Process process = processBuilder.start();
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
String s;
System.out.printf("Output of running is:");
while ((line = br.readLine()) != null) {
System.out.print("ligne out: ");
System.out.println(line);
}
BufferedReader stdError = new BufferedReader(
new InputStreamReader(process.getErrorStream()));
while ((s = stdError.readLine()) != null) {
System.out.println(s);
}
process.waitFor();
System.out.println(process.exitValue());
}
catch (IOException | InterruptedException e) {
e.printStackTrace();
}
A voir également:

1 réponse

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Bonjour,

Ton code fonctionne cependant je le trouve maladroit notamment sur la consommation des flux. Voici une alternative :

private static Thread consume(InputStream in, Consumer<String> out) {
    Thread t = new Thread(() -> {
        try (Scanner sc = new Scanner(in)) {
            while (sc.hasNextLine())
                out.accept(sc.nextLine());
        }
    });
    t.setDaemon(true);
    t.start();
    return t;
}

Process process = new ProcessBuilder("pathtoExe/executable.exe").start();
Thread out = consume(process.getInputStream(),
    line -> System.out.println("STDOUT: " + line));
Thread err = consume(process.getErrorStream(),
    line -> System.err.println("STDERR: " + line));
if (process.waitFor(5, TimeUnit.SECONDS)) {
    System.out.println("EXIT: " + process.exitValue());
    out.join();
    err.join();
} else {
    System.err.println("TIMEOUT !");
}

Quant à ton problème, de quel serveur on parle ?
Où est le fichier .exe sur le serveur ?
0
DeadPool33 Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   1
 
j'ai un serveur glassfish qui roule sur windows server 2008 et c'est le code du serveur web qui appel l'exécutable. Quand je déploie et localhost, le exe s'exécute mais quand je le déploie sur glassfish, rien
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Rien ça veut dire quoi ? Tu as une exception ? Que disent les logs ?
Est-ce que tu as essayés mon code ?
0
DeadPool33 Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   1
 
J'ai essayer ton code et il fonctionne en localhost mais pas sur mon server glassfish..
Quand je dit rien, et bien avec ton code par exemple, je reçois" exit : 0" comme message et c'est tout...aucun autre message ou erreur...
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Si tu as "exit : 0", le programme commence et termine, c'est déjà mieux que rien.

Il est censé faire quoi ton programme ?
0
DeadPool33 Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   1
 
mon programme créer un fichier word et le sauvegarde sur le serveur et par la suite est envoyé au client pour qu'il puisse le télécharger.
0