Gibt es in Java eine Möglichkeit, das System aufzufordern, die Kontrolle über die Administratorfunktion zu übernehmen? Natürlich ohne zu tun: Rechtsklick auf die exe -> als Admin ausführen.
Was ich will, ist, dass es einen Rahmen von UAC wie in Windows Vista oder Windows 7 gibt.
Oder muss ich einige Einstellungen vornehmen, während ich eine Exe aus dem JAR mache?
Sie müssen eine Manifestdatei erstellen, die angibt, dass Ihre Anwendung Administratorberechtigungen benötigt. Sie können das Manifest in Ihre Exe einfügen oder es als separate Datei (yourapp.exe.manifest) behalten.
Das Problem ist natürlich, dass die “ausführbare Datei” die JVM ist, nicht Ihr eigener Code. Und da das Manifest für die JVM gilt, gilt es für alles, was von dieser JVM ausgeführt wird.
– MSalter
8. September 2009 um 10:59 Uhr
Was ist, wenn Sie eine Wrapper-Exe haben, die Java startet? Wird der Administratorzugriff vom untergeordneten Prozess (jvm) übernommen?
– Kal
22. Oktober 2009 um 3:01 Uhr
@Cal – Ja – sobald ein Prozess erhöht ist, werden alle von ihm erstellten Prozesse erhöht. Die UAC-Erhöhung ändert buchstäblich den Benutzer, unter dem die Anwendung ausgeführt wird, und es ist eine Einbahnstraße – Sie können eine Erhöhung vornehmen, aber Sie können nicht wieder nach unten fallen.
– Kevin-Tag
12. Januar 2011 um 4:32 Uhr
Matt DeVillier
Der einfachste Weg wäre, einen Wrapper zu verwenden, um Ihre JVM zu starten, und dann den Wrapper zu erhöhen. Ich verwende dazu ein einfaches NSIS-Installationsskript mit dem UAC-Plugin:
; 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
Die Antwort von ZippyV ist in Ordnung, wenn Sie beabsichtigen, javaw.exe mit Systemadministratorrechten zu starten, was, wenn reiner Java-Code von der UAC blockiert wird (z wird tun müssen.
Wenn Sie jedoch versuchen, etwas Externes zu starten, aber nur mit Erhöhung, können Sie eine Exe bündeln, die einen Befehl erhöht. Hier ist eine.
Danke! Normalerweise möchten Sie nicht, dass eine Benutzeranwendung als Administrator ausgeführt wird (nur bestimmte privilegierte Aktionen), daher ist dies wahrscheinlich in den meisten Fällen die geeignetere Lösung. Mir gefällt auch, dass die Elevate.exe eine -wait-Option hat, sodass Sie blockieren können, bis der Befehl mit erhöhten Rechten abgeschlossen ist.
– rauben
14. Januar 2011 um 20:33 Uhr
Wenn ich Ihren Link richtig gelesen habe, muss man auch die Registrierung ändern, was möglicherweise nicht immer möglich ist.
– wie Judo
13. August 2013 um 15:55 Uhr
Sie können ein Windows-Programm verwenden, um Ihre Berechtigungen zu erhöhen. Das Programm zeigt die UAC-Eingabeaufforderung an und Sie haben Administratorrechte.
Wenn Sie alles ausführen können, was Sie zum Ausführen von einer Windows-CMD-Batchdatei benötigen. Ich habe es funktioniert, also startet mein Java-Programm dies und es öffnet die normale Windows-UAC-Eingabeaufforderung für den Benutzer und führt dann die Befehle aus, wenn sie JA wählen.
Hier ist ein Thread, der sich mit dem Anfordern des UAC-Zugriffs in einer Windows-Batchdatei befasst: How to request Administrator access within a batch file
HINWEIS: ProcessBuilder kann etwas schwierig zu handhaben sein, die Verwendung eines StreamGobbler zur Verarbeitung der Ausgabe funktioniert für mich: Eingabe mit StreamGobbler verarbeiten
Roshan Pitigala
Ich werde erklären, wie Sie eine erhöhte Java-Anwendung erhalten
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 ist zB einfach notepad.exe nennen
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");
}
}
Dann haben Sie ein erhöhtes Programm. Ich empfehle Ihnen – Sie müssen in einen binären Wrapper wie Launch4j oder Parcle konvertieren, dann können Sie klicken – Wenn Sie ein benutzerdefiniertes Installationsprogramm erstellen (hergestellt von Java Swing oder Awt.)
Ich hoffe, Sie haben eine gute Lösung 🙂 – Wenn Sie Linux oder Mac OS X verwenden, müssen Sie Parcle Binary Wrapper oder einen anderen Wrapper verwenden, wenn Sie wissen …
// EDIT gute Idee von Kaptkaos Dann schreibst du einfach:
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");
}
}
Verwendung nicht vergessen '' und "" wenn -jar <filename>.jar from -Argument des Start-Prozesses. Hinweis nicht vergessen – Wenn Sie das Arbeitsverzeichnis verwenden, muss sich die JAR-Datei beispielsweise im Arbeitsverzeichnis befinden
.\myjar.jar
java .\RunAsAdminExample.class
Dann können Sie erhöhtes Java mit Argument sehen 🙂
Mit freundlichen Grüßen!
Kaptkaos
Ich verwende zu diesem Zweck die Befehlszeile unter Windows. Geben Sie im Startmenü ein cmd in der Textbox und wenn das Programm cmd.exe angezeigt wird, klicken Sie mit der rechten Maustaste darauf und wählen Sie Als Administrator ausführen. Jetzt, wenn Sie ausführen java-jar Es wird mit Admin-Rechten ausgeführt.
Der Autor erwähnt ausdrücklich “Natürlich ohne zu tun: Rechtsklick auf die Exe -> als Administrator ausführen”, also was soll diese Antwort?
– SeverityOne
13. Oktober 2020 um 7:46 Uhr
8594400cookie-checkJava: Als Administrator ausführenyes