Процесс ProcessBuilder через UAC?

Я пытаюсь запустить внешний исполняемый файл, но, видимо, ему требуется повышение прав. Вот этот код, измененный из примера использования 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. Однако я бы предпочел не заставлять людей, использующих мою программу, также устанавливать эти инструменты повышения прав.

Есть другой способ?

15
задан Community 23 May 2017 в 12:26
поделиться