2009-07-02 27 views
14

¿Es posible solicitar permisos elevados desde una aplicación Java? Las sugerencias que he visto parecen centrarse en ejecutar un ejecutable externo o configurar un manifiesto para solicitar privilegios en el inicio. Estos no están disponibles para, por ejemplo, applets. ¿Hay alguna forma de solicitar elevación desde una aplicación en ejecución?UAC y Java

+0

Consulte http://stackoverflow.com/questions/1385866/java-run-as-administrator/1385901#1385901, que sugiere el uso de una utilidad Elevate.exe para iniciar un proceso separado elevado para realizar las acciones privilegiadas. – rob

+0

Esto puede hacerse a través de JNA. Ver [esto] (http://stackoverflow.com/questions/11041509/elevating-a-processbuilder-process-via-uac) – dARKpRINCE

Respuesta

8

UAC no es algo que un proceso en ejecución puede solicitar (no importa en qué idioma se esté ejecutando). Tienes que solicitar la elevación en el momento del lanzamiento.

La forma en que la mayoría de las aplicaciones de Windows manejar esto (y lo hacen mirar como que están solicitando elevación) es para desovar una copia extra de sí mismos, solicitando la elevación, y pasando suficientes argumentos de línea de comandos para el nuevo proceso para que el se puede mostrar el diálogo apropiado.

Esta es la razón por la elevación de UAC en un cuadro de diálogo siempre se inicia con un clic de botón que abre un nuevo cuadro de diálogo.

Por lo tanto, en el mundo de Java, solo tiene que hacer exactamente lo que todos los demás tienen que hacer: iniciar de nuevo su aplicación, solicitando elevación. Hay varias formas de lanzar elevado, el verbo 'ejecutar como' probablemente sea el más fácil.

+1

Más detalles sobre la solicitud de elevación, por favor. Estoy llegando vacío en Google y trato de usar "runas" simplemente falla (está buscando una contraseña de la CLI en lugar de abrir el cuadro de diálogo). –

+0

@Brian - ¿esto ayuda? http://stackoverflow.com/questions/1797695/how-to-runlaunch-elevated-command-promt-programmiticaly-in-vista - si no, crea una nueva pregunta con el código que estás usando y publica el enlace a este comentario hilo y veré qué ayuda puedo ofrecer. –

+0

@Kevin Miedo no. No estoy usando .Net, estoy usando Java.Además, ya estoy haciendo el equivalente Java de eso. Puedo lanzar lo que quiera en el mismo nivel de elevación, pero cuando intento escalarlo de esa manera desde mi aplicación, simplemente se recupera inmediatamente sin un error y sin hacer nada. Desde la línea de comando lanza una solicitud de contraseña de línea de comando. –

3

Parece que Sun tendrá que manejar ese tipo de situación en el JRE ya que no hay otra manera de realizar acciones elevadas que mediante la ejecución de un proceso externo.

Si JRE lo admite, JVM probablemente tenga que ejecutar un proceso separado y elevado para el código de Java que solicita la elevación.

Por ahora, solo el manifiesto o la ejecución de una aplicación externa son las únicas soluciones disponibles hasta donde yo sé.

La pregunta es, ¿para qué necesitas elevación?

+2

En el pasado, pudimos usar applets firmados para instalar y cargar algunos códigos nativos. Esto ya no es posible en Vista con UAC habilitado, aunque el modelo de seguridad de Java ostensiblemente lo permite. – joegester

+0

La API de preferencias de Java (nivel del sistema) falla si UAC también está activado ... –

2

Tienes que usar una aplicación externa (nativa) para hacer esto. Esta publicación proporciona el código fuente y una gran explicación: UAC Prompt From Java

0

Puede usar jna y hacer un ShellExec. Para lpOperation use "runas" (esto no está documentado). Dado que es probable que necesite la ruta completa a la JavaVM (actual) que se almacena en el registrylook en registry access, parte de JNA.

0

Vaya a la carpeta donde está instalado java. abra las propiedades de javaw.exe/java.exe y configure la opción "ejecutar como administrador" como verdadera.

Cuestiones relacionadas