Est-il possible de demander des autorisations élevées à partir d'une application Java? Les suggestions que j'ai vues semblent toutes centrées sur l'exécution d'un exécutable externe ou la configuration d'un manifeste pour demander des privilèges au lancement. Ils ne sont pas disponibles pour, par exemple, les applets. Est-il possible de demander l'élévation à partir d'une application en cours d'exécution?UAC et Java
Répondre
UAC n'est pas quelque chose qu'un processus en cours d'exécution peut demander (quelle que soit la langue utilisée). Vous devez demander l'altitude au moment du lancement. La manière dont la plupart des applications Windows traitent cela (et fait regarder comme si elles demandaient l'élévation) est d'engendrer une copie supplémentaire d'eux-mêmes, en demandant l'élévation, et de passer des arguments de ligne de commande suffisants au nouveau processus afin que le Le dialogue approprié peut être affiché.
C'est pourquoi l'élévation d'UAC dans une boîte de dialogue est toujours initiée par un clic de bouton qui ouvre une nouvelle boîte de dialogue. Donc, dans le monde Java, il suffit de faire exactement ce que tout le monde a à faire: lancer à nouveau votre application, en demandant l'élévation. Il y a plusieurs façons de lancer Elevated, le verbe «courir comme» est probablement le plus facile.
Pour plus d'informations sur la demande d'élévation, veuillez. J'arrive vide sur Google et essayer d'utiliser "runas" échoue juste (il cherche un mot de passe de la CLI au lieu d'ouvrir la boîte de dialogue). –
@Brian - est-ce que cela aide? http://stackoverflow.com/questions/1797695/how-to-runlaunch-elevated-command-promt-programmiticaly-in-vista - si ce n'est pas le cas, créez une nouvelle question avec le code que vous utilisez et postez le lien vers ce commentaire thread et je vais voir quelle aide je peux offrir. –
@Kevin N'a pas peur. Je n'utilise pas .Net, j'utilise Java.Aussi, je fais déjà l'équivalent Java de cela. Je suis capable de lancer tout ce que je veux au même niveau d'élévation, mais quand j'essaie de l'escalader ainsi depuis mon application, il rebondit immédiatement sans erreur et sans rien faire. À partir de la ligne de commande, il lance une invite de mot de passe de ligne de commande. –
On dirait que Sun devra gérer ce genre de situation dans le JRE car il n'y a pas d'autre moyen d'effectuer des actions élevées qu'en exécutant un processus externe.
Si JRE le prenait en charge, JVM devrait probablement exécuter un processus séparé et élevé pour le code java demandant l'élévation.
Pour l'instant cependant, seul le manifeste ou l'exécution d'une application externe sont les seules solutions disponibles pour autant que je sache. La question est: pour quoi avez-vous besoin d'élévation?
Dans le passé, nous pouvions utiliser des applets signés pour installer et charger du code natif. Ce n'est plus possible sur Vista avec UAC activé même si le modèle de sécurité de Java le permet ostensiblement. – joegester
L'API Java Preferences (niveau système) échoue si l'UAC est activé ... –
Pour ce faire, vous devez utiliser une application externe (native). Ce post fournit le code source et une excellente explication: UAC Prompt From Java
Vous pouvez utiliser jna et faire un ShellExec. Pour lpOperation, utilisez "runas" (ceci n'est pas documenté). Puisque vous avez probablement besoin du chemin d'accès complet au JavaVM (actuel) qui est stocké dans le registre au registry access, une partie de JNA.
Allez dans le dossier où Java est installé. Ouvrez les propriétés de javaw.exe/java.exe et définissez l'option "Exécuter en tant qu'administrateur" true.
Voir http://stackoverflow.com/questions/1385866/java-run-as-administrator/1385901#1385901, qui suggère d'utiliser un utilitaire Elevate.exe pour lancer un processus élevé séparé afin d'effectuer les actions privilégiées. – rob
Cela peut être fait via JNA. Voir [this] (http://stackoverflow.com/questions/11041509/elevating-a-processbuilder-process-via-uac) – dARKpRINCE