Запустите процесс выполнения Java с правами администратора в Vista

StackOverflow https://stackoverflow.com/questions/1420901

Вопрос

я хочу запустить установщик 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

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

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

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

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

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

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

РЕДАКТИРОВАТЬ:

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

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top