2012-07-18 4 views
1

Je suis sur une application JSF, j'ai un .bat que je veux lancer en cliquant sur un bouton Command, ce script se trouve dans le répertoire webcontent de mon projet. Le code de l'action est:Lancer .bat sur une application web

public String genererRapportTable() { 
    try { 
    ServletContext ctx = (ServletContext) FacesContext 
     .getCurrentInstance().getExternalContext().getContext(); 
    String realPath = ctx.getRealPath("/"); 
    String[] command = { "cmd.exe", "/C", "start", realPath + "Tools\\cmd.bat" }; 
    Runtime.getRuntime().exec(command); 
    } catch (IOException e) { 
    e.printStackTrace(); 
    } 
    return null; 
} 

Le chemin est construit correctement, mais le script ne démarre pas!

L'écran de mise au point:

enter image description here

Ce que je reçois pour la sortie:

enter image description here

Ainsi, le chemin est correct, mais le script ne démarre pas. Quand je mets le .bat sur c:\Tools et j'utilise ce chemin "C:\\Tools\\cmd.bat" cela fonctionne. Quel est le problème?

Répondre

1

Pourriez-vous poster le contenu du fichier batch? J'ai remarqué que le chemin réel est utilisé comme titre pour la nouvelle fenêtre d'invite de commande. Ceci est un comportement typique de mauvaise utilisation de la commande start (le premier argument n'est pas le chemin vers l'exécutable mais le title pour la nouvelle fenêtre Ne me demandez pas, je ne sais pas pourquoi ...) Employez-vous start dans le fichier batch

+0

Oui oui, j'ai commencé à ne pas courir, j'ai juste essayé de courir pour tester! – Potinos

+0

java -Xmx512m -jar schémaSpy_5.0.0.jar -t orathin -db nrefurg -hôte colline2 -port 1533 -s GA_ADM -u ga_adm -p ga_adm -o DOC -dj ojdbc-14.jar -i DOC -gv "Graphviz_2. 28 "-hq – Potinos

+1

Tout comme @jeb a commenté, vous devez ajouter le paramètre title (premier paramètre). Vérifiez 'start /?' Dans une invite de commande et vérifiez la syntaxe. – Cascader

1

Si vous utilisez démarrer pour exécuter votre lot, vous devez mettre un titre entre guillemets comme premier paramètre, car votre chemin contient des espaces et sera également cité.
La commande de démarrage utilisait toujours le premier paramètre cité comme titre.

start "myTitle" cmd.exe /c myBat.bat 

Quelque chose comme cela devrait fonctionner
String[] command = { "cmd.exe", "/C", "start", "\"myTitle\" \""+realPath + "Tools\\cmd.bat\""};

Vous devriez également renommer cmd.bat à un meilleur nom, afin qu'il ne puisse pas entrer en collision avec cmd.exe.

+0

Mais il fonctionne correctement lors de l'utilisation: String [] commande = {"cmd.exe", "/ C", "start", "C: \\ Tools \\ cmd.bat"}; Runtime.getRuntime(). Exec (commande); Cet id cmd.bat existe sur c: \ Tools \ Le problème est seulement quand j'essaye ceci dans le répertoire du serveur! – Potinos

+1

Je suppose que c'est parce que 'C: \ Tools \ cmd.bat' ne contient pas d'espaces – jeb

+0

Oui c'est l'espace, comment puis-je y échapper? – Potinos

Questions connexes