2009-09-06 17 views
37

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

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

risposta

20

È necessario creare un file manifest che specifica che l'applicazione richiede le autorizzazioni di amministratore. È possibile includere il manifesto nel vostro exe o tenerlo come file separato (yourapp.exe.manifest)

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

+8

Il problema, naturalmente, è che "eseguibile" sarà la JVM, non il tuo codice. E poiché il manifest si applica alla JVM, si applica a qualsiasi cosa venga eseguita da quella JVM. – MSalters

+1

Cosa succede se si dispone di un wrapper exe che avvia java? L'accesso amministratore sarà ereditato dal processo figlio (jvm)? – Cal

+3

@Cal - Sì - una volta elevato un processo, tutti i processi creati verranno elevati. L'elevazione UAC cambia letteralmente l'utente che l'applicazione è in esecuzione come, ed è una strada a senso unico: è possibile elevare, ma non è possibile tornare indietro. –

8

risposta di ZippyV va bene se si ha intenzione di lanciare il javaw.exe con i privilegi di amministratore di sistema, che se il puro codice java è ciò che viene bloccato da UAC (come ad esempio provare a scrivere un file in una directory privilegiata), allora è quello che devi fare.

Se, tuttavia, si sta tentando di avviare qualcosa di esterno, ma solo con l'elevazione, è possibile raggruppare un exe che eleva un comando. Here is one.

+0

Grazie! Normalmente non si desidera che un'applicazione utente venga eseguita come amministratore (solo alcune azioni privilegiate), quindi questa è probabilmente la soluzione più appropriata nella maggior parte dei casi. Mi piace anche che Elevate.exe abbia un'opzione -wait in modo da poter bloccare fino al completamento del comando sopraelevato. – rob

+0

se leggo correttamente il tuo link, si deve anche modificare il registro che potrebbe non essere sempre un'opzione. – likejiujitsu

9

Il modo più semplice sarebbe quella di utilizzare un wrapper per lanciare il vostro JVM, quindi elevare l'involucro. Io uso un semplice script di installazione NSIS con il plugin UAC per fare questo:

; 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 
1

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 diritti di amministratore.

+0

È lavoro per me, grazie per la soluzione molto semplice –

-3

Accedere a java.exe e javaw.exe all'interno della cartella di installazione. ie - C: \ Programmi \ Java \ jre7 \ bin o C: \ Programmi \ Java \ jdk1.7.0_17 \ bin fare clic con il tasto sinistro su di essi e selezionare Proprietà-> Compatibilità e lì: controllare "eseguire questo programma come amministratore".

+2

Questa è una pessima idea, dato che dà _every_ diritti di amministratore del programma Java. Il malware non ha nemmeno bisogno di sfruttare i buchi di sicurezza nell'implementazione Java per poter pwnare il tuo sistema, dato che hai appena consegnato la chiave. –

2

Se è possibile eseguire tutto ciò che è necessario eseguire da un file batch CMD di Windows .. È possibile 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 fa apparire il normale UAC di Windows 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 un filo che si occupa di richiesta di accesso dell'account utente all'interno di un file di Windows batch: How to request Administrator access inside a batch file

NOTA: ProcessBuilder può essere un po 'difficile da affrontare, con uno StreamGobbler per gestire le opere d'uscita per me: Handle Input using StreamGobbler

0

vi spiegherò come si fa a ottenere un'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 <program.exe> -verb RunAs"); 
    } 
} 

program.exe è 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 quello che hai ottenuto il programma elevata. vi Consiglierei - È necessario convertire in involucro binario come Launch4J o Parcle Than è possibile fare clic - (. Fatta da Java Swing o AWT) Se si crea installazione personalizzato

Spero che tu abbia buona soluzione :) - Se utilizzare Linux o Mac OS X di quanto è necessario utilizzare Parcle involucro binario o altro involucro se si sa ...

// EDIT buona idea da Kaptkaos Than si scrive 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 dimenticate di usa "" e "" if -jar .jar da -Argument di Start-Process. Nota Non dimenticare - Se si utilizza directory di lavoro e vaso file deve essere nella directory di lavoro esempio \ myjar.jar java \ RunAsAdminExample.class di quanto si può vedere elevata Java con argomento :)

i migliori saluti..!