Java: ejecutar como administrador


Hay una manera en Java de pedir al sistema que obtenga el control sobre 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 tengo que hacer algunos ajustes mientras hago un exe desde el frasco?

Author: Martijn Courteaux, 2009-09-06

8 answers

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.manifiesto)

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

 20
Author: ZippyV,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-06 15:11:14

La forma más fácil sería usar un wrapper para lanzar su JVM, luego elevar el wrapper. Utilizo un script de instalación NSIS simple con el plugin 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
 9
Author: Matt DeVillier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-05 16:19:30

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

Si, sin embargo, está tratando de lanzar algo externo, pero solo con elevación, podría agrupar un exe que eleva un comando. Aquí hay uno.

 8
Author: Yishai,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-06 15:17:03

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

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

Entonces puede ejecutar el comando de esta manera:

Runtime.getRuntime().exec("Elevate.exe yourcommand");
 5
Author: mathd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-17 20:23:49

Si puede ejecutar lo que necesite ejecutar desde un archivo por lotes CMD de Windows.. Puedes crear un archivo por lotes (incluso sobre la marcha) desde tu aplicación Java que haga lo que quieras e iniciarlo. Lo tengo trabajando así que mi programa Java inicia esto y aparece el indicador UAC normal de Windows al usuario y luego ejecuta los comandos si eligen 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 difícil de tratar, el uso de un StreamGobbler para manejar la salida funciona para mí: Manejar la entrada usando StreamGobbler

 2
Author: crig,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:32

Utilizo la línea de comandos en Windows para este propósito. Desde el menú Inicio, escriba cmd en el cuadro de texto y, cuando el programa cmd.aparece exe, haga clic derecho sobre él y seleccione Ejecutar como administrador. Ahora cuando ejecutes java-jar se ejecutará con derechos de administrador.

 1
Author: Kaptkaos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-15 19:08:47

Voy a explicar cómo se obtiene una 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 <program.exe> -verb RunAs");
    }
}

Programa.exe es un ejemplo, simplemente llame al bloc de notas.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");
    }
}

Entonces tienes un programa elevado. Te recomiendo-Necesitas convertir a wrapper binario como Launch4j o Parcle Entonces puede hacer clic-Si crea instalador personalizado (hecho por Java Swing o Awt.)

Espero que tenga una buena solución :) - Si utiliza Linux o Mac OS X de lo que necesita utilizar Parcle binary wrapper u otro wrapper si lo sabe...

// EDITAR buena idea por Kaptkaos De lo que escribes 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 olvide usar '' y "" si -jar <filename>.jar from-Argumento de Start-Process. Nota no se olvide-Si se utiliza el directorio de trabajo y el archivo jar debe estar en el directorio de trabajo ejemplo

  • .\ myjar.jar
  • java .\RunAsAdminExample.clase

Entonces puedes ver java elevado con el argumento:)

Saludos cordiales!

 1
Author: SourceSkyBoxer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-05 09:23:53

Accede a java.exe y javaw.exe dentro de la carpeta de instalación. i. e - C:\Program Archivos \ Java\jre7 \ bin o C:\Program Files \ Java\jdk1. 7. 0_17\bin haga clic izquierdo en ellos y seleccione propiedades - >compatability y allí: marque "ejecutar este programa como administrador".

 -3
Author: tomermes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-29 20:34:29