Solicitar privilegios de administrador para la aplicación Java en Windows Vista

Cuando bash crear una nueva tarea en el progtwigdor de tareas a través de la clase Java ProcessBuilder obtengo un error de acceso denegado en Windows Vista. En XP funciona bien.

Cuando uso la opción “Ejecutar como administrador” también se ejecuta en Vista …

Sin embargo, este es un paso adicional requerido y los usuarios pueden no saberlo. Cuando el usuario simplemente hace doble clic en el ícono de la aplicación, fallará con acceso denegado. Mi pregunta es ¿cómo puedo forzar a una aplicación java a solicitar privilegios de administrador justo después del inicio?

No estoy seguro de que puedas hacerlo programáticamente. Si tiene un instalador para su aplicación, puede agregar la clave de registro para forzar la ejecución como administrador:

Ruta de acceso: HKEY_CURRENT_USER \ Software \ Microsoft \ Windows NT \ Currentversion \ Appcompatflags \ layers

Clave: << Camino completo a exe >>

Valor: RUNASADMIN

Tipo: REG_SZ

¿Has considerado envolver tu aplicación Java en un .exe usando launch4j? Al hacer esto, puede incrustar un archivo de manifiesto que le permita especificar el “nivel de ejecución” para su ejecutable. En otras palabras, usted controla los privilegios que deben otorgarse a su aplicación en ejecución, y le dice al sistema operativo que “Ejecute como administrador” sin que el usuario lo haga manualmente.

Por ejemplo…

build.xml:

    

myappConfig.xml:

  false gui bin\myapp.jar bin\myapp.exe normal http://java.com/download true false myapp.manifest   1.5.0  preferJre   

myapp.manifest:

           

Consulte http://msdn.microsoft.com/en-us/library/bb756929.aspx y el sitio web launch4j para obtener detalles sobre el modo.

Aunque la respuesta de FreeCouch es buena, enfrenté algún problema y pensé en ponerlo aquí para que la próxima vez otros puedan beneficiarse fácilmente.

Para obtener el permiso de administrador en Java, en la medida en que encontré la solución, es envolver el * .jar dentro de un * .exe con un progtwig como Launch4J y un Manifiesto vinculante.

Para crear un archivo Manifest, abra cualquier editor de texto como el Bloc de notas y pegue estas líneas en él y guárdelo con el nombre del archivo junto con su extensión, por ejemplo: myApplication.exe.manifest

           

En Launch4J, en la pestaña Basic agregue este archivo en la opción Manifiesto Wrapper.

No he encontrado la mejor solución aún. Pero tengo una solución alternativa en comparación con “James Van Huis”. Use RUNASINVOKE en su lugar para que no tenga que ver el indicador Permitir / Denegar cada vez que ejecute la aplicación.

Nota: siempre tienes que ser administrador, eso es lo que estoy tratando de resolver.

Uso del complemento launch4j Gradle

Especialmente cuando ya usas Gradle, es fácil aplicar el complemento launch4j para solucionar este problema.

Como en la respuesta de FreeCouch , crea un archivo myapp.manifest con

           

luego aplique el complemento Gradle agregándolo a su build.gradle

 plugins { id 'java' id 'edu.sc.seis.launch4j' version '2.4.3' } launch4j { mainClassName = 'com.mypackage.MainClass' icon = "$projectDir/icons/icon.ico" manifest = "$projectDir/myapp.manifest" } 

o, si usa Kotlin Gradle DSL, a su build.gradle.kts :

 plugins { application kotlin("jvm") version "1.2.31" java id("edu.sc.seis.launch4j") version "2.4.3" } launch4j { mainClassName = "com.mypackage.MainKt" icon = "$projectDir/icons/icon.ico" manifest = "$projectDir/myapp.manifest" } 
    Intereting Posts