2009-07-02 8 views
14

È possibile richiedere autorizzazioni elevate da un'applicazione Java? I suggerimenti che ho visto sembrano incentrati sull'esecuzione di un eseguibile esterno o sulla creazione di un manifest per richiedere i privilegi all'avvio. Questi non sono disponibili, ad esempio, per le applet. C'è un modo per richiedere l'elevazione da un'applicazione in esecuzione?UAC e Java

+0

Vedere http://stackoverflow.com/questions/1385866/java-run-as-administrator/1385901#1385901, che suggerisce l'utilizzo di un'utilità Elevate.exe per avviare un processo elevato separato per eseguire le azioni privilegiate. – rob

+0

Questo può essere fatto tramite JNA. Vedi [this] (http://stackoverflow.com/questions/11041509/elevating-a-processbuilder-process-via-uac) – dARKpRINCE

risposta

8

UAC non è qualcosa che può essere richiesto da un processo in esecuzione (non importa quale lingua si sta eseguendo). Devi richiedere l'elevazione al momento del lancio.

Il modo in cui la maggior parte delle applicazioni Windows di gestire questo (e lo rendono sembrare come stanno chiedendo elevazione) è quello di generare una copia in più di se stessi, la richiesta di elevazione, e passando gli argomenti della riga di comando sufficienti per il nuovo processo in modo che il la finestra di dialogo appropriata può essere visualizzata.

Questo è il motivo per cui l'elevazione UAC in una finestra di dialogo viene sempre avviata da un clic del pulsante che apre una nuova finestra di dialogo.

Quindi, nel mondo Java, devi solo fare esattamente quello che devono fare tutti gli altri: avviare di nuovo l'app, richiedere l'elevazione. Ci sono diversi modi per lanciare elevati, il verbo 'run as' probabilmente è il più semplice.

+1

Ulteriori dettagli sulla richiesta di elevazione, per favore. Sto uscendo vuoto su Google e provando a usare "runas" non funziona (sta cercando una password dalla CLI invece di scattare la finestra di dialogo). –

+0

@Brian: questo aiuto? http://stackoverflow.com/questions/1797695/how-to-runlaunch-elevated-command-promt-programmiticaly-in-vista - in caso contrario, crea una nuova domanda con il codice che stai utilizzando e pubblica il link a questo commento thread e vedrò quale aiuto posso offrire. –

+0

@Kevin Impaurito. Non sto usando .Net, sto usando Java.Inoltre, sto già facendo l'equivalente Java di questo. Sono in grado di lanciare tutto ciò che voglio allo stesso livello di elevazione, ma quando provo ad aumentarlo in quel modo dalla mia app, si rimbalza immediatamente senza errori e senza fare nulla. Dalla riga di comando lancia una richiesta di password da riga di comando. –

3

Sembra che Sun dovrà gestire questo tipo di situazione nel JRE poiché non c'è altro modo di fare azioni elevate piuttosto che eseguire un processo esterno.

Se JRE lo supportava, JVM avrebbe probabilmente dovuto eseguire un processo separato e elevato per il codice java che richiedeva l'elevazione.

Per ora tuttavia, solo il manifest o l'esecuzione di un'applicazione esterna sono le uniche soluzioni disponibili per quanto ne so.

La domanda è: a cosa serve elevazione?

+2

In passato, siamo stati in grado di utilizzare applet firmate per installare e caricare del codice nativo. Questo non è più possibile su Vista con UAC abilitato anche se il modello di sicurezza di Java lo consente apparentemente. – joegester

+0

Java Preferences API (livello di sistema) non funziona se UAC è attivo ... –

2

Per eseguire questa operazione è necessario utilizzare un'applicazione esterna (nativa). Questo post fornisce il codice sorgente e una grande spiegazione: UAC Prompt From Java

0

Si potrebbe utilizzare jna e fare uno ShellExec. Per lpOperation usare "runas" (questo non è documentato). Dal momento che è probabile che sia necessario il percorso completo del JavaVM (corrente) memorizzato nel registrylook su registry access, parte di JNA.

0

Passare alla cartella in cui è installato java. apre le proprietà di javaw.exe/java.exe e imposta l'opzione "run as administator" true.