Abhebung eines ProcessBuilder Prozess über die Benutzerkontensteuerung?
Ich versuche zu laufen, eine externe ausführbare Datei, aber anscheinend braucht es Höhe. Der code ist, modifiziert aus einem Beispiel mit ProcessBuilder (daher das array mit einem argument) :
public static void main(String[] args) throws IOException {
File demo = new File("C:\\xyzwsdemo");
if(!demo.exists()) demo.mkdirs();
String[] command = {"C:\\fakepath\\bsdiff4.3-win32\\bspatch.exe"};
ProcessBuilder pb = new ProcessBuilder( command );
Process process = pb.start();
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
System.out.printf("Output of running %s is:\n", Arrays.toString(command));
while ((line = br.readLine()) != null) {
System.out.println(line);
}
try {
int exitValue = process.waitFor();
System.out.println("\n\nExit Value is " + exitValue);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Gibt es diese bei der Ausführung:
Exception in thread "main" java.io.IOException: Cannot run program "C:\Users\Gilliane\Downloads\bsdiff4.3-win32\bspatch.exe": CreateProcess error=740, The requested operation requires elevation
Ich habe einige surfen rund um und wissen, dass in C# können Sie verlangen, Höhe von, dies zu tun, (wie man aus dieser thread):
startInfo.Verb = "runas";
Aber ich sehe nichts wie das mit ProcessBuilder. Eine andere Methode wäre es, die Elevation Tools auf dem Zielsystem installiert werden, und zum aufrufen des "elevate" - prompt mit ProcessBuilder. Allerdings würde ich das eher nicht die Kraft der Menschen, die mit meinem Programm zu installieren auch diese Erhöhung tools.
Gibt es einen anderen Weg?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese nicht getan werden kann mit ProcessBuilder, müssen Sie zum Aufruf der Windows-API.
Ich verwendet habe, JNA dies zu erreichen, mit code ähnlich dem folgenden:
Shell32X.java
:Elevator.java
:Prunge's Antwort funktioniert gut für mich.Aber nachdem ich ein wenig mehr Forschung ,fand ich heraus, ein weiterer Ansatz mit vb-script und batch-Datei.Ich bevorzuge diese Methode, da mit vb-script nicht dazu führen, schwarze cmd-Fenster, um pop-up jedes mal,wenn ich öffne meine Anwendung.
Erstellen einer normalen bat-Datei zu öffnen, die externe ausführbare Datei.
Ich werde zu öffnen, ein MySQL-server ausführbare Datei
Speichern Sie es als mysql.bat
Nun erstellen Sie ein vb-Skript mit admin-rechten und am Ende fügen Sie das Skript zu öffnen, mysql.bat-Datei.
Am Ende CreateObject("Wscript.Shell").Run führt die bat-Datei mysql.bat.
Thats it