Java выполняет команду runas и вводит пароль в командной строке: «Ошибка закрытия конвейера» - PullRequest
0 голосов
/ 12 февраля 2019

Я хочу запустить / остановить службу из моей Java-программы, для которой я использую терминальные команды.Проблема в том, что мне нужно запустить терминал от имени администратора, для которого я использую API-интерфейс ProcessBuilder.

public void startService(String serviceName) throws IOException, InterruptedException {

    String[] cmdArray = {"cmd.exe", "/c", 
                         "runas /savecred /profile /user:admin \"sc start " + serviceName + "\""};

    Process process = new ProcessBuilder(cmdArray).start();

    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
    OutputStreamWriter output = new OutputStreamWriter(process.getOutputStream());
    String line;        

    while ((line = bufferedReader.readLine()) != null) {
        System.out.println(line); //Prints "enter the password for admin"
}
    output.write("password"); //my password
    output.newLine();
    output.flush();
    //output.wait();
    process.destroy();
  }

Команда выполняется нормально и печатает Enter the password for admin, но когда я передаю ее через выходной поток процесса, я получаю ошибку ввода-вывода java.io.IOException: The pipe is being closed.Я также пытался добавить echo mypassword | перед командой, которая не запрашивает пароль на терминале, но запрашивает из Java-программы.Любая помощь в этом очень приветствуется.

РЕДАКТИРОВАТЬ- Я получаю сообщение об ошибке на output.flush()

...