Я хочу запустить / остановить службу из моей 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()