Java: esegui come amministratore

C’è un modo in Java per chiedere al sistema di ottenere il controllo sulle funzionalità dell’amministratore. Naturalmente senza fare: tasto destro del mouse su exe -> eseguire come amministratore.
Quello che voglio è che ci sia un frame da UAC come in Windows Vista o Windows 7.

O devo fare alcune impostazioni mentre faccio un exe dal barattolo?

Devi creare un file manifest che specifichi che la tua applicazione ha bisogno delle autorizzazioni di amministratore. Puoi includere il manifest nel tuo exe o tenerlo come un file separato (yourapp.exe.manifest)

http://msdn.microsoft.com/en-us/library/bb756929.aspx

Il modo più semplice sarebbe utilizzare un wrapper per avviare la JVM, quindi elevare il wrapper. Per fare questo, utilizzo un semplice script di installazione NSIS con il plugin UAC:

; Java Launcher ;-------------- ; You want to change the below lines Name "my program" Caption "my program Launcher" Icon "iconfile.ico" OutFile "java launcher.exe" ; param below can be user, admin RequestExecutionLevel admin !include UAC.nsh SilentInstall silent AutoCloseWindow true ShowInstDetails show Section "" ; command to execute StrCpy $0 'javaw -jar myjarfile' SetOutPath $EXEDIR Exec $0 SectionEnd 

La risposta di ZippyV va bene se si intende avviare javaw.exe con i privilegi di amministratore di sistema, che se il puro codice java è quello che viene bloccato da UAC (come provare a scrivere un file in una directory privilegiata), allora questo è ciò che dovrà fare.

Se, tuttavia, stai provando a lanciare qualcosa di esterno, ma solo con l’elevazione, potresti raggruppare un exe che eleva un comando. Eccone uno

Puoi usare un programma Windows per elevare i tuoi privilegi. Il programma mostrerà il prompt UAC e quindi avrai il privilegio di amministratore.

http://jpassing.com/2007/12/08/launch-elevated-processes-from-the-command-line/

È quindi ansible eseguire per comando come questo:

 Runtime.getRuntime().exec("Elevate.exe yourcommand"); 

Se è ansible eseguire tutto ciò che è necessario eseguire da un file batch CMD di Windows. È ansible creare un file batch (anche al volo) dall’app java che esegue ciò che si desidera e avviarlo. L’ho fatto funzionare così il mio programma java lo lancia e appare il normale UAC di Windows che chiede all’utente e poi esegue i comandi se scelgono YES.

  String[] commands = {"cmd.exe", "/C" "mybatchfile.bat"}; ProcessBuilder pb = new ProcessBuilder(commands); .. pb.start(); 

Ecco una discussione che riguarda la richiesta di accesso UAC all’interno di un file batch di Windows: Come richiedere l’accesso come amministratore all’interno di un file batch

NOTA: ProcessBuilder può essere un po ‘difficile da gestire, usando un StreamGobbler per gestire l’output per me: Gestire l’input usando StreamGobbler

Io uso la riga di comando su Windows per questo scopo. Dal menu Start, digitare cmd nella casella di testo e quando viene visualizzato il programma cmd.exe , fare clic con il pulsante destro del mouse e selezionare Esegui come amministratore. Ora quando si esegue java -jar verrà eseguito con i diritti di amministratore.

Spiegherò come si ottiene l’applicazione java elevata

 import java.io.IOException; public class RunAsAdminExample { public static void main(String[] args) throws IOException { Process myappProcess = Runtime.getRuntime().exec("powershell.exe Start-Process  -verb RunAs"); } } 

program.exe è un esempio, basta chiamare notepad.exe

 import java.io.IOException; public class RunAsAdminExample { public static void main(String[] args) throws IOException { Process myappProcess = Runtime.getRuntime().exec("powershell.exe Start-Process notepad.exe -verb RunAs"); } } 

Di quanto tu abbia un programma elevato. Ti raccomando – Hai bisogno di convertire in un wrapper binario come Launch4j o Parcle di quanto tu possa fare clic – Se crei un programma di installazione personalizzato (creato da Java Swing o Awt.)

Spero che tu abbia una buona soluzione 🙂 – Se usi Linux o Mac OS X piuttosto che usare Parcle binary wrapper o altri wrapper se sai …

// EDIT buona idea di Kaptkaos Rispetto a scrivere semplice:

 import java.io.IOException; public class RunAsAdminExample { public static void main(String[] args) throws IOException { Process myappProcess = Runtime.getRuntime().exec("powershell.exe Start-Process -FilePath java.exe -Argument '-jar runasadmin.jar' -verb RunAs"); } } 

Non dimenticare di usare '' e "" if -jar .jar da -Argument di Start-Process. Nota non dimenticare – Se si utilizza la directory di lavoro e il file jar deve essere nell’esempio di directory di lavoro

  • . \ Myjar.jar
  • java. \ RunAsAdminExample.class

Di quanto tu possa vedere elevato java con argomento 🙂

I migliori saluti!

Accedi a java.exe e javaw.exe nella cartella di installazione. vale a dire – C: \ Programmi \ Java \ jre7 \ bin o C: \ Programmi \ Java \ jdk1.7.0_17 \ bin sinistra clic su di essi e selezionare Proprietà-> Compatibilità e lì: controllare “Esegui questo programma come amministratore”.