Вызов внешнего процесса с другим пользователем в Java - PullRequest
4 голосов
/ 11 сентября 2009

У нас есть Java-приложение, работающее как служба Windows. Для выполнения определенной функции требуется двоичный файл, но с другим пользователем, чем тот, который запустил приложение.

Есть ли способ, с помощью которого мы можем вызвать exe-файл в стиле «Запуск от имени другого пользователя».

Я проверил API ProcessBuilder, но не нашел ничего связанного с пользователем. Есть ли какой-либо сторонний инструмент для достижения этой цели.

Ответы [ 3 ]

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

Вы можете использовать PSExec для выполнения процессов от имени другого пользователя. Командная строка выглядит так:

psexec.exe -u username -p password mybinary.exe

Затем вы можете использовать ProcessBuilder для построения команды вокруг этого.

Редактировать: Вот пример того, как вы можете это сделать:

public int startProcess(String username, String password, 
        String executable, String... args) throws IOException {

    final String psexec = "C:\\PsTools\\psexec.exe"; //psexec location

    //Build the command line
    List<String> command = new LinkedList<String>();
    command.add(psexec);

    if(username != null) {
        command.add("-u");
        command.add(username);
        command.add("-p");
        command.add(password);
    }

    command.add(executable);
    command.addAll(Arrays.asList(args));

    ProcessBuilder builder = new ProcessBuilder(command);
    Process process = builder.start();

    int returnCode;

    try {
        returnCode = process.waitFor();
    } catch (InterruptedException e) {
        returnCode = 1;
    }

    return returnCode;
}

Затем вы можете использовать его так:

startProcess("Bob", "Password", "Notepad.exe", "C:\\myfile.txt");
0 голосов
/ 30 декабря 2015

Метод Runtime.getRuntime (). Exec (?).

0 голосов
/ 11 сентября 2009

Я считаю, что вы можете использовать команду runas DOS в крайнем случае, если вы не можете найти что-то еще. (Введите runas в командной строке для получения информации об использовании.)

Редактировать: К сожалению, согласно примечанию здесь это, очевидно, не будет работать от службы. : / Возможно, вы сможете создать небольшое отдельное приложение-обертку, которое вы можете вызвать, но затем вызовите двоичный файл с runas.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...