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

Langage Java Discussion :

Lancer un exécutable sous un nom d'utilisateur


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2002
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 18
    Par défaut Lancer un exécutable sous un nom d'utilisateur
    Bonjour,

    Je débute en JAVA et voici mon souci :
    Je suis en environnement Windows Server 2000 avec BD Oracle et mon pb était de pouvoir lancer un éxécutable depuis une procédure stockée JAVA. J'ai résolu ce pb en incorporant à ma BD Oracle une classe JAVA permettant de lancer une application externe à l'aide du 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
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    public static int RunThis(String[] args)
         {
         Runtime rt = Runtime.getRuntime();
         int        rc = -1;
     
         try
         {
            Process p = rt.exec(args[0]);
     
            int bufSize = 4096;
            BufferedInputStream bis =
             new BufferedInputStream(p.getInputStream(), bufSize);
            int len;
            byte buffer[] = new byte[bufSize];
     
            // Echo back what the program spit out
            while ((len = bis.read(buffer, 0, bufSize)) != -1)
               System.out.write(buffer, 0, len);
     
            rc = p.waitFor();
         }
         catch (Exception e)
         {
            e.printStackTrace();
            rc = -1;
         }
         finally
         {
            return rc;
         }
         }
       }
    Jusque là pas de souci sauf que le processus lancé est lancé en tant qu'utilisateur SYSTEM ce qui pourrait poser problème dans notre environnement.
    Je voudrai donc savoir s'il est possible en JAVA de lancer une application externe sous un certain nom d'utilisateur (en l'occurence administrateur dans mon cas) et si oui comment ?
    Merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2006
    Messages : 21
    Par défaut
    Bonjour,

    Je viens de me joindre à ce forum, et vu la vitesse à laquelle on m'as répondu je me sens tt de suite obliger de contribuer ;-)

    A ma connaissance il n'existe pas de fonction dans les API Java permettant une exécution sous un user spécifique (a proposer pour java7...) La meilleur solution que je vois (et que j'utliserais) serais la suivant :

    Utiliser la Java Native Interface (JNI) afin de faire des appels directement au DLL Windows. Je ne connais pas la documentations par coeur mais une recherche dans les APIs Microsoft (MSDN) te permettrait de trouver la méthode appropriée (en regardant les sources de programme c++ qui font la même chose, tu peux également trouver les APIs nécessaire).

    Une introduction à JNI

    En écrivant ceci une deuxième solution me vient à l'ésprit, une solution qui est toutefois beaucoup moins "propre" (il est de toute façon pas très propre de faire du code spécifique a la plateforme lorsqu'on code en java...) :

    En utilisant la commande "runas" de windows il est possible d'executer par ligne de commande un programme sous un autre utilisateur, il suffit donc de préformater la ligne de commande avec les paramètre nécessaire.

    Utilisation de la commande "runas"

    Désolé pour mon orthographe parfois aléatoire,

  3. #3
    Membre averti
    Inscrit en
    Mai 2002
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 18
    Par défaut
    Je te remercie beaucoup de ta réponse et je regarderai tout ça demain à tête reposée

    PS : rassures-toi, ton orthographe n'est pas mal du tout !

  4. #4
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    Je viens d'apprendre quelque chose. Merci. En effet, le problème aurait été sous UNIX, j'aurais proposé d'utiliser "sudo" dans la ligne de commande. Mais je ne connaissais pas l'équivalent windows "runas".

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2006
    Messages : 21
    Par défaut
    Mon collègue m'as demander aujourd'hui de trouver les APIs pour changer les droits d'éxecution sur une thread en cours...

    Du coup en browsant la MSDN j'ai trouvé l'api que tu dois utiliser :
    Create process as user

Discussions similaires

  1. Réponses: 0
    Dernier message: 21/06/2015, 17h25
  2. Lancer un exécutable via PHP sous linux
    Par MSM_007 dans le forum Langage
    Réponses: 2
    Dernier message: 22/06/2009, 07h45
  3. Réponses: 1
    Dernier message: 12/06/2008, 12h24
  4. Lancer l'exécution d'un script Tcl sous MacOS X
    Par sekaijin dans le forum Tcl/Tk
    Réponses: 2
    Dernier message: 02/07/2007, 17h24
  5. lancer un daemon sous un utilisateur
    Par icer dans le forum Administration système
    Réponses: 4
    Dernier message: 06/06/2007, 13h11

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