IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Java Discussion :

Runtime.getRuntime().exec cmd windows 7


Sujet :

API standards et tierces Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 68
    Points : 52
    Points
    52
    Par défaut Runtime.getRuntime().exec cmd windows 7
    Bonjour,

    Dans une application web réalisée en Java, j'exécute dans une servlet un fichier .vbs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Runtime.getRuntime().exec("cmd /k " + path + "exec_macro.vbs");
    Lorsque l'application est déployée sur un serveur Tomcat sous Windows XP, cela fonctionne sans problèmes.

    En revanche, le script vbs ne s'exécute pas lorsque l'appli est déployée sur un serveur Tomcat sous Windows 7.

    Le Runtime.getRuntime().exec pose-t-il problème sous Windows 7 ? Est-ce que c'est la commande cmd qui pose problème ? Toute idée sera la bienvenue.

    A noter que le fichier vbscript s'éxécute correctement sous Windows 7 lorsque je double clique dessus. Il s'exécute également depuis une fenêtre cmd ("démarrer > exécuter")

    Concernant le pare-feu, tout est désactivé.

    Je vous remercie par avance.

  2. #2
    Membre du Club

    Inscrit en
    Janvier 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 44
    Points : 64
    Points
    64
    Par défaut
    je crois que ce que tu racontes là doit aussi se vérifier sur un window vista.

    Sur Vista ou Seven maintenant, à chaque fois qu'on veut exécuter quelques chose on est prompté pour vérifier que telle est bien notre intention.

    Tu peux essayer ce contournement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Runtime.exec(...."cmd.exe", "/c", "myprog"...)
    Ou alors lancer ton appli java comme un admin, si c'est possible.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 10
    Points : 11
    Points
    11
    Par défaut
    Ah, les joies de Microsoft qui s'essaie à une politique de gestion de droits..

    Sous nunux il y avait un truc pour ça je crois, une histoire de bit SUID je crois.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 68
    Points : 52
    Points
    52
    Par défaut
    j'ai essayé l'option /c mais du coup, cela ne marche pas non plus

  5. #5
    Membre du Club

    Inscrit en
    Janvier 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 44
    Points : 64
    Points
    64
    Par défaut
    ok et si tu fais juste un main avec cette commande, est-ce que ça plante également ?

    Si oui, si tu lances ce main en tant qu'admin, est-ce que ça plante encore ?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 68
    Points : 52
    Points
    52
    Par défaut
    après diverses tentatives, mon problème est toujours présent...
    A noter que cela lance quand meme un processus "cmd", visible depuis le gestionnaire de taches.
    Mais pour autant, rien ne s'execute.
    Un simple MsgBox "test" dans le script vbs ne marche pas...

  7. #7
    Membre actif
    Homme Profil pro
    Analyst
    Inscrit en
    Juillet 2008
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyst
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 150
    Points : 217
    Points
    217
    Par défaut
    Pour info:
    Je suis loggué avec un profil "Administrateur".
    Windows7 / Java 7
    J'ai créé la classe suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public class Lance1 {
     
    	public static void main(String[] args) {
    		System.out.println("avant");
    		try{
    			Runtime.getRuntime().exec("cmd /k D:\\temp\\test.vbs");
    		}catch(Exception e){
    			System.out.println("erreur:"+e);
    		}
     
     
    		System.out.println("après");
     
    	}
    }
    Avec D:\temp\test.vbs:
    Lancement depuis Eclipse: OK
    Ouverture d'une commande DOS (sans demander droits administrateur):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    D:\Work\Test\bin>java Lance1
    =>OK

    J'ai créé le ".bat " suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    d:
    cd D:\Work\Test\bin
    java Lance1
    pause
    Je double-clic: OK (pas besoin de faire "executer en tant qu'Administrateur")

    Tout ces tests sont KO chez toi ? Comment est ton utilisateur (standard ou administrateur)?

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 68
    Points : 52
    Points
    52
    Par défaut
    Déjà, merci beaucoup pour l'intérêt porté à mon problème.
    ElbeDD, j'ai essayé tes tests. Tout fonctionne correctement.
    Mais du coup, je ne vois toujours pas d'où peut venir mon problème.
    Pourquoi le "Runtime.getRuntime().exec" de ma servlet n'execute pas mon fichier vbs ? Est-ce que cela peut prove,nir du serveur Tomcat ?

  9. #9
    Membre actif
    Homme Profil pro
    Analyst
    Inscrit en
    Juillet 2008
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyst
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 150
    Points : 217
    Points
    217
    Par défaut Test avec Tomcat
    Bonsoir,
    J'ai encapsulé le code précédent dans la méthode doGet()/doPost() d'une servlet.
    Puis sous Windows, dans "Outils d'administration/services", j'ai selectionné le service "Apache Tomcat 6". Clic droit, Propriétés.
    Onglet Connexion
    Il y'avait "Compte système local". J'ai coché "Autoriser le service à interagir avec le bureau".
    En demarrant Tomcat, il ouvre une fenetre "Détection des services interactifs"
    Si j'appelle la servlet, puis si je vais dans "Afficher le message", je vois bien la message box qui s'affiche.
    Je ne connais pas plus que ça ce mode interactif (1ere fois sous Win7) ni les scripts VBS. Si tu as un exemple de script qui ne nécessite pas de fenetre (genre creer un fichier c:\toto.txt), je pourrais peut etre testé davantage.
    Je te suggere de tester les autres paramètres (préciser un compte dans "Connexion" du service "Apache Tomcat"

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 68
    Points : 52
    Points
    52
    Par défaut Problème résolu
    Bonjour,

    Dans le script vbs, le msgbox ne m'affiche toujours pas de messages.
    Alors, j'ai essayé suivant tes conseils de créer un fichier plutôt avec le bout de code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Const ForReading = 1, ForWriting = 2
      Set WshShell = WScript.CreateObject("WScript.Shell")
       Dim fso, f
       Set fso = CreateObject("Scripting.FileSystemObject")
       Set f = fso.OpenTextFile("c:\temp\ecr.txt", ForWriting,true)
       f.write("Salut")
    Et cela fonctionne.
    Cela signifie donc que dans ma servlet, la ligne de code suivante fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Runtime.getRuntime().exec("cmd /k " + path + "exec_macro.vbs");
    Cela signifie également que le fichier vbs s'exécute correctement.

    A l'origine, mon problème venait du fait que dans mon fichier vbs, je manipulait un fichier Excel (exécution de la macro Traitement_DT du fichier Edition.xls) avec le bout de code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Set args = Wscript.Arguments
    var=args(0)
     
    Dim objXL
     
    Set objXL = CreateObject("Excel.Application")
    With objXL
        .Workbooks.Open ("c:\Edition.xls")
        .Application.Run "Traitement_DT", Cstr(var)
        .Application.Quit
     
    End With
    Set objXL = Nothing
    Et c'est la ligne suivante qui posait problème car elle bloquait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set objXL = CreateObject("Excel.Application")
    La raison se trouve dans les propriétés de mon composant que l'on trouve dans Panneau de config > Outils d'admin >Service des composants

    puis dans

    Racine de la console > Service des composants > Ordinateurs > Poste de travail > configuration DCOM > Microsoft Excel Application

    Dans les propriétés, dans l'onglet "général", j'ai mis le niveau d'authentification à "aucun" et dans l'onglet "sécurité", j'ai tout autorisé

    Voilà, j'espère avoir été assez précis pour que cela puisse être utile à d'autres.
    Et encore merci beaucoup pour votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Système][Runtime]getRuntime().exec
    Par Neptune8 dans le forum API standards et tierces
    Réponses: 11
    Dernier message: 22/02/2011, 20h34
  2. Runtime.getRuntime().exec sous linux
    Par syl2095 dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 30/01/2007, 13h56
  3. Runtime.getRuntime().exec(String) méthode sort
    Par devAd dans le forum Langage
    Réponses: 4
    Dernier message: 28/11/2006, 14h53
  4. [Runtime.getRuntime().exec] ouvrir un fichier ??
    Par miloud dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 29/03/2006, 15h23
  5. [Swing] execution avec Runtime.getRuntime().exec
    Par benssj5 dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 25/08/2004, 15h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo