Sto provando a eseguire un eseguibile esterno, ma a quanto pare ha bisogno di elevazione. Il codice è questo, modificato da un esempio di utilizzo ProcessBuilder (da qui l'array con un argomento):Elevare un processo ProcessBuilder tramite UAC?
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();
}
}
Esso restituisce questo quando eseguire:
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
Ho fatto qualche giro la navigazione, e sa che in C#, è possibile richiedere l'elevazione in questo modo, (come si vede da this thread):
startInfo.Verb = "runas";
Tuttavia, non vedo niente di simile con ProcessBuilder. Un altro metodo sarebbe quello di avere il Elevation Tools installato sul sistema di destinazione e di richiamare il prompt "Elevare" con ProcessBuilder. Tuttavia, preferirei non forzare le persone che usano il mio programma a installare anche quegli strumenti di elevazione.
C'è un altro modo?
Grazie per la rapida risposta! Lo verificherò nell'ambito della mia applicazione e ti farò sapere come funziona. –
Il programma di elevazione funziona alla grande. Grazie mille! –
C'è un modo per evitare il popup di conferma (esegui come amministratore) usando qualcosa nel codice? – Affi