Démarrez le processus d'exécution Java avec les droits d'administrateur sur Vista.
-
07-07-2019 - |
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);
}
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