Запустите Java Runtime Process с правами администратора в Vista - PullRequest
4 голосов
/ 14 сентября 2009

Я хочу запустить установщик setup.exe, который устанавливает программное обеспечение на Vista с Java 1.6.

Пользователь не является администратором. Когда я пытаюсь запустить процесс, я получаю сообщение об ошибке:

CreateProcess error=740

, что означает, что у пользователя недостаточно прав для запуска процесса.

Могу ли я указать флаг или параметр, чтобы указать, что процесс должен выполняться с правами администратора? Сама Vista имеет эту функциональность внутри панели инструментов меню. Могу ли я использовать эту функцию в Java.

я вызываю следующий код

        Runtime rt = Runtime.getRuntime();
        Process process;
        try {
            String fileToExecute = new File(mFolder, mSetupFiles[0]).getCanonicalPath();

            if (logger.isDebugEnabled()) {
                logger.debug("Execute runtime process");
            }
            process = rt.exec(fileToExecute, null, mFolder);

            process.getErrorStream().close();
            process.getInputStream().close();
            process.getOutputStream().close();

            if (logger.isDebugEnabled()) {
                logger.debug("Wait until process is finished");
            }
            process.waitFor();
        } catch (IOException e) {
            throw new StartException(e);
        } catch (InterruptedException e) {
            throw new StartException(e);
        }

Ответы [ 2 ]

3 голосов
/ 14 сентября 2009

(я не пробовал это), но кажется, что вы можете сделать это с помощью программы "elevate" из здесь

также читайте это для обзора UAC

2 голосов
/ 15 сентября 2009

После 2 дней тестирования я нашел следующее решение.

Ошибка возникает при активации функции Vista UAC. UAC показывает диалоговое окно с вопросом каждый раз, когда процессу требуются права администратора.

Отображение этого диалога вызывает проблему.

Вместо использования старого

process = rt.exec(fileToExecute, null, mFolder);

команда, я сейчас использую новую 1,5 ProcessBuilder команда

EDIT:

Чтобы избежать проблемы, вы должны открыть командное окно, которое запрашивает разрешение. И чем вам нужно назвать внешний процесс.

ProcessBuilder builder = new ProcessBuilder(new String[] { "cmd.exe", "/C", fileToExecute });

Также здесь описано Выполнить внешнюю Программу

...