Я пытаюсь запустить внешний исполняемый файл, но, видимо, ему требуется повышение прав. Вот этот код, измененный из примера использования ProcessBuilder (отсюда и массив с одним аргументом):
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();
}
}
Он возвращает это при запуске:
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
Я немного просмотрел и знаю, что в C# вы можете запросить возвышение, выполнив это (как видно из этого потока ):
startInfo.Verb = "runas";
Однако я не вижу ничего подобного с ProcessBuilder. Другим методом может быть установка Elevation Toolsв целевой системе и вызов приглашения «повышение уровня» с помощью ProcessBuilder. Однако я бы предпочел не заставлять людей, использующих мою программу, также устанавливать эти инструменты повышения прав.
Есть другой способ?