Java: ejecutar como administrador

¿Hay alguna manera en Java para pedirle al sistema que controle la funcionalidad del administrador? Por supuesto, sin hacer: haga clic derecho en el exe -> ejecutar como administrador.
Lo que quiero es que venga un marco de UAC como en Windows Vista o Windows 7.

¿O debo hacer algunos ajustes mientras hago un exe del jar?

Debe crear un archivo de manifiesto que especifique que su aplicación necesita permisos de administrador. Puede incluir el manifiesto en su exe o mantenerlo como un archivo separado (yourapp.exe.manifest)

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

La forma más fácil sería usar un contenedor para iniciar su JVM y luego elevar el contenedor. Utilizo un simple script de instalador de NSIS con el complemento de UAC para hacer esto:

; 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 

La respuesta de ZippyV está bien si tiene la intención de ejecutar javaw.exe con privilegios de administrador del sistema, que si el código UAC puro es lo que está siendo bloqueado por el UAC (como tratar de escribir un archivo en un directorio privilegiado), entonces eso es lo que tendrá que hacer.

Sin embargo, si intentas lanzar algo externo, pero solo con elevación, podrías agrupar un exe que eleve un comando. Aquí hay uno .

Puede usar un progtwig de Windows para elevar su privilegio. El progtwig mostrará el mensaje de UAC y luego tendrá privilegios de administrador.

http://jpassing.com/2007/12/08/launch-elevated-processes-from-the-command-line/

Luego puede ejecutar un comando como este:

 Runtime.getRuntime().exec("Elevate.exe yourcommand"); 

Si puede ejecutar lo que necesite para ejecutar desde un archivo por lotes de CMD de Windows. Puede crear un archivo de proceso por lotes (incluso sobre la marcha) desde su aplicación java que hace lo que quiere e iniciarlo. Lo tengo funcionando, por lo que mi progtwig java lo inicia y muestra el mensaje de Windows UAC normal al usuario y luego ejecuta los comandos si elige SÍ.

  String[] commands = {"cmd.exe", "/C" "mybatchfile.bat"}; ProcessBuilder pb = new ProcessBuilder(commands); .. pb.start(); 

Aquí hay un hilo que trata de solicitar acceso UAC dentro de un archivo por lotes de Windows: Cómo solicitar acceso de administrador dentro de un archivo por lotes

NOTA: ProcessBuilder puede ser un poco complicado de manejar, usando un StreamGobbler para manejar los trabajos de salida para mí: Handle Input using StreamGobbler

Utilizo la línea de comando en Windows para este propósito. En el menú Inicio, escriba cmd en el cuadro de texto y cuando aparezca el progtwig cmd.exe , haga clic con el botón derecho y seleccione Ejecutar como administrador. Ahora cuando ejecutes java -jar it se ejecutará con derechos de administrador.

Voy a explicar cómo se obtiene la aplicación Java elevada

 import java.io.IOException; public class RunAsAdminExample { public static void main(String[] args) throws IOException { Process myappProcess = Runtime.getRuntime().exec("powershell.exe Start-Process  -verb RunAs"); } } 

program.exe es un ejemplo, simplemente llame 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"); } } 

Que tienes un progtwig elevado Te recomiendo – Necesitas convertir a contenedor binario como Launch4j o Parcle de lo que puedes hacer clic – Si creas un instalador personalizado (creado por Java Swing o Awt).

Espero que tengas una buena solución 🙂 – Si usas Linux o Mac OS X de lo que necesitas, usa el parche binario Parcle u otro envoltorio si sabes …

// EDITAR buena idea por Kaptkaos que escribir simple:

 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"); } } 

No olvides usar '' y "" si -jar .jar desde -Argumento del proceso de inicio. Nota: no olvide: si utiliza el directorio de trabajo y el archivo jar debe estar en el directorio de trabajo, por ejemplo

  • . \ myjar.jar
  • java. \ RunAsAdminExample.class

Que puedes ver elevado java con argumento 🙂

¡Atentamente!

Acceda a java.exe y javaw.exe dentro de la carpeta de instalación. es decir, C: \ Archivos de progtwig \ Java \ jre7 \ bin o C: \ Archivos de progtwig \ Java \ jdk1.7.0_17 \ bin, haga clic en ellos y seleccione propiedades -> compatibilidad y allí: marque “ejecutar este progtwig como administrador”.

    Intereting Posts