Question

Je souhaite exécuter un programme d'installation setup.exe qui installe un logiciel sur vista avec Java 1.6.

L'utilisateur n'est pas un administrateur. Lorsque j'essaie de démarrer le processus, le message d'erreur suivant s'affiche:

CreateProcess error=740

qui indique que l'utilisateur ne dispose pas de suffisamment de droits pour lancer le processus.

Puis-je soumettre un indicateur ou une option pour indiquer que le processus doit s'exécuter avec des droits d'administrateur? Vista elle-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);
        }
Était-ce utile?

La solution 2

Après 2 jours d’essais, j’ai trouvé la solution suivante.

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

Afficher cette boîte de dialogue provoque le problème.

Au lieu d'utiliser l'ancien

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

, j'utilise maintenant le nouveau 1.5 Commande ProcessBuilder

EDIT:

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

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

Voir également Exécuter un programme externe

Autres conseils

(Je n’ai pas essayé cela), mais il semble que vous puissiez le faire en utilisant le paramètre "elevate". programme de ici

lisez également ceci pour une vue d'ensemble de l'UAC

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top