instalar - permisos para ejecutar java
Java: ejecutar como administrador (8)
Acceda a java.exe y javaw.exe dentro de la carpeta de instalación. es decir, C: / Archivos de programa / Java / jre7 / bin o C: / Archivos de programa / Java / jdk1.7.0_17 / bin, haga clic en ellos y seleccione propiedades -> compatibilidad y allí: marque "ejecutar este programa 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)
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 programa de Windows para elevar su privilegio. El programa 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 programa 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 programa 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 <program.exe> -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 programa 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 de -Argumento de Start-Process. Nota: no olvides: si utilizas el directorio de trabajo y el archivo jar, debes tener el ejemplo del directorio de trabajo. / Myjar.jar java. / RunAsAdminExample.class Que puedes ver elevado Java con argumento :)
¡Atentamente!