webentwicklung-frage-antwort-db.com.de

Java: Als Administrator ausführen

Gibt es eine Möglichkeit in Java) das System zu bitten, die Kontrolle über die Administratorfunktionalität zu erlangen?.
Ich möchte, dass es einen Frame von der Benutzerkontensteuerung gibt, wie in Windows Vista oder Windows 7.

Oder muss ich ein paar Einstellungen vornehmen, während ich eine Exe aus dem Glas mache?

40

Sie müssen eine Manifestdatei erstellen, die angibt, dass Ihre Anwendung Administratorrechte benötigt. Sie können das Manifest in Ihre EXE-Datei aufnehmen oder als separate Datei (yourapp.exe.manifest) aufbewahren.

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

20
ZippyV

Am einfachsten ist es, die JVM mit einem Wrapper 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
9
Matt DeVillier

Die Antwort von ZippyV ist in Ordnung, wenn Sie beabsichtigen, die Datei javaw.exe mit Systemadministratorrechten zu starten. Wenn es sich um reinen Java - Code handelt, wird dieser von der Benutzerkontensteuerung blockiert (z. B. beim Versuch, eine Datei in a zu schreiben) privilegiertes Verzeichnis), dann müssen Sie dies tun.

Wenn Sie jedoch versuchen, etwas Externes zu starten, aber nur mit elevation, können Sie eine exe bündeln, die einen Befehl erhöht. Hier ist einer .

8
Yishai

Sie können ein Windows-Programm verwenden, um Ihre Rechte zu erhöhen. Das Programm zeigt die UAC-Eingabeaufforderung an und Sie haben dann Administratorrechte.

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

Sie können dann den folgenden Befehl ausführen:

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

Wenn Sie alles ausführen können, was Sie für die Ausführung von einer Windows CMD-Batchdatei benötigen, können Sie eine Batchdatei (sogar im Handumdrehen) in Ihrer Java App erstellen, die genau das tut, was Sie wollen, und starten 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 er JA wählt.

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

Hier ist ein Thread, der sich mit dem Anfordern von UAC-Zugriff in einer Windows-Batchdatei befasst: So fordern Sie Administratorzugriff in einer Batchdatei an

HINWEIS: Der Umgang mit ProcessBuilder kann etwas kompliziert sein, wenn ich einen StreamGobbler verwende, um die Ausgabe zu verarbeiten: Eingaben mit StreamGobbler verarbeiten

2
crig

Ich werde erklären, wie Sie Java application

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 beispielsweise einfach notepad.exe aufrufen

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 hast du ein gehobenes Programm. Ich empfehle Ihnen - Sie müssen in einen Binär-Wrapper wie Launch4j oder Parcle konvertieren. Dann klicken Sie auf - Wenn Sie ein benutzerdefiniertes Installationsprogramm erstellen (erstellt 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 good idea by Kaptkaos Dann schreibe 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");
    }
}

Vergessen Sie nicht, '' und "" wenn -jar <filename>.jar aus -Argument des Start-Prozesses. Hinweis nicht vergessen - Wenn Sie ein Arbeitsverzeichnis verwenden, muss die JAR-Datei im Arbeitsverzeichnis sein

  • .\myjar.jar
  • Java.\RunAsAdminExample.class

Dann können Sie Java mit Argument sehen :)

Freundliche Grüße!

1
SourceSkyBoxer

Ich benutze dazu die Kommandozeile unter Windows. Geben Sie im Startmenü cmd in das Textfeld ein. Wenn das Programm cmd.exe angezeigt wird, klicken Sie mit der rechten Maustaste darauf und wählen Sie Als Administrator ausführen. Wenn Sie jetzt Java -jar ausführen, wird es mit Admin-Rechten ausgeführt.

1
Kaptkaos