我有一个Windows runas
命令在命令行输入时效果很好,但从我的Java程序通过Runtime.exec()
调用时不。代码看起来几乎完全像这样:
// Create the process.
Process process = Runtime.getRuntime().exec(
String.format(
"runas /noprofile /user:DOMAIN\\OtherUser \"%s\",
command));
// Enter the password.
try (OutputStream outputStream = process.getOutputStream();
PrintWriter printWriter = new PrintWriter(outputStream)) {
printWriter.printf("%s\n", password);
printWriter.flush();
} catch (IOException ex) {
ex.printStackTrace();
}
// Wait for the process to terminate.
process.waitFor();
我看到密码提示Enter the password for DOMAIN\OtherUser:
,然后进程立即终止,退出值为1。
作为实验,我将process.waitFor();
移到输入密码的代码上方,期望进程在密码提示符下挂起。但是,该过程不挂起。它仍然以1结尾! (然后尝试输入密码会导致java.io.IOException: Stream Closed
。)
相同的代码将成功运行不需要输入的流程(并且不会通过runas
),并且还能成功地向Linux上的sudo --stdin
提供输入。
我研究了很多类似的问题而没有运气。
有问题的Windows是Windows 7,有问题的Java是Java 8.
答案 0 :(得分:0)