È 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
risposta
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.
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). –
@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. –
@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. –
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?
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
Java Preferences API (livello di sistema) non funziona se UAC è attivo ... –
Per eseguire questa operazione è necessario utilizzare un'applicazione esterna (nativa). Questo post fornisce il codice sorgente e una grande spiegazione: UAC Prompt From Java
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.
Passare alla cartella in cui è installato java. apre le proprietà di javaw.exe/java.exe e imposta l'opzione "run as administator" true.
- 1. Modello prompt UAC e prospetto
- 2. WiX, UAC, azione personalizzata gestita e imitazione
- 3. Previene la virtualizzazione UAC?
- 4. Automaticamente invocando gksudo come UAC
- 5. CreateDesktop() con vista e UAC su (C, windows)
- 6. Pimp mio UAC e alcune domande a riguardo
- 7. Elevare un processo ProcessBuilder tramite UAC?
- 8. Process.Start non ritorna mai quando UAC negato
- 9. Delphi: richiesta di elevazione UAC quando necessario
- 10. Avvia l'applicazione al termine dell'installazione, con UAC attivato
- 11. QProcess :: startDetached bloccato da UAC (eseguendo un programma di aggiornamento)
- 12. Il messaggio di avvertenza di Windows 7 UAC causa
- 13. In che modo Windows decide se visualizzare il prompt UAC?
- 14. Win C#: Esegui app come amministratore senza prompt UAC
- 15. Mostrando il prompt UAC in PowerShell se l'azione richiede l'elevazione
- 16. UAC elevazione non permette il drag and drop
- 17. Posso interrompere un eseguibile dal richiedere l'elevazione UAC?
- 18. E 'possibile UAC elevare un processo senza avviare un altro processo
- 19. Aggiungi uno scudo UAC a un pulsante e conserva la sua immagine di sfondo?
- 20. Funzionalità e Linux e Java
- 21. Java: esegui come amministratore
- 22. Java SE incorporato e Java ME
- 23. Analizzatore Java e JS Java gratuito
- 24. differenza tra java bean e java class?
- 25. Java Generics e numeri
- 26. Matrici Java e PostgreSQL
- 27. Array associativi e Java
- 28. jQuery e Java applet
- 29. Java: Instanceof e Generics
- 30. Scala e Java BigDecimal
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
Questo può essere fatto tramite JNA. Vedi [this] (http://stackoverflow.com/questions/11041509/elevating-a-processbuilder-process-via-uac) – dARKpRINCE