2009-09-14 14 views
4

Je veux exécuter un programme d'installation setup.exe qui installe un logiciel sous Vista avec java 1.6.Démarrage de Java Runtime Process avec droits d'administrateur sur Vista

L'utilisateur n'est pas un administrateur. Quand je tente de démarrer le processus que je reçois le message d'erreur:

CreateProcess error=740 

qui indique que l'utilisateur n'a pas assez de droits pour le démarrage du processus.

Puis-je soumettre un indicateur ou une option pour indiquer que le processus doit s'exécuter avec des droits d'administrateur? Vista lui-même a cette fonctionnalité dans la barre d'outils du menu. Puis-je utiliser cette fonction en Java.

J'appelle le code suivant

 Runtime rt = Runtime.getRuntime(); 
     Process process; 
     try { 
      String fileToExecute = new File(mFolder, mSetupFiles[0]).getCanonicalPath(); 

      if (logger.isDebugEnabled()) { 
       logger.debug("Execute runtime process"); 
      } 
      process = rt.exec(fileToExecute, null, mFolder); 

      process.getErrorStream().close(); 
      process.getInputStream().close(); 
      process.getOutputStream().close(); 

      if (logger.isDebugEnabled()) { 
       logger.debug("Wait until process is finished"); 
      } 
      process.waitFor(); 
     } catch (IOException e) { 
      throw new StartException(e); 
     } catch (InterruptedException e) { 
      throw new StartException(e); 
     } 
+0

-moi si je me trompe à ce sujet, mais il semble que vous demandez un moyen de permettre à un installateur « setup.exe » pour remplacer le système d'exploitation et DONNEZ LUI-MÊME PRIVILEGES ADMINISTRATIFS! Bien sûr, je pourrais avoir mal compris, mais cela semble risqué. – pavium

+0

Ce que je veux, c'est que Vista demande le nom d'utilisateur/mot de passe admin quand il est requis avant/pendant l'ouverture d'un fichier avec des permissions. –

+0

Oui, je vois, ce serait mieux. Vista demande le nom d'utilisateur et mot de passe, puis l'exécution se poursuit. – pavium

Répondre

2

Après 2 jours de test, j'ai trouvé la solution suivante.

L'erreur survient lorsque la fonctionnalité Vista UAC est activée. L'UAC affiche une boîte de dialogue de questions à chaque fois, lorsqu'un processus a besoin de droits d'administrateur.

L'affichage de cette boîte de dialogue provoque le problème.

Au lieu d'utiliser l'ancien

process = rt.exec(fileToExecute, null, mFolder); 
commande

, je suis maintenant en utilisant le nouveau 1.5 ProcessBuilder commande

EDIT:

Pour éviter le problème, vous devez ouvrir une fenêtre de commande qui demande la permission. Et que vous devez appeler le processus externe.

ProcessBuilder builder = new ProcessBuilder(new String[] { "cmd.exe", "/C", fileToExecute }); 

également décrit ici Execute an external Program

3

(je n'ai pas essayé), mais il semble que vous pouvez le faire en utilisant le programme « élever » de here

lire également this pour un aperçu UAC

Questions connexes