【发布时间】:2014-09-10 10:09:12
【问题描述】:
我有应该停止 Windows 服务的 java 代码 当我在其他不需要管理员权限的命令上尝试它时效果很好但要停止 Windows 服务我必须以管理员身份启动命令行 我尝试了启动记事本的示例代码,只是为了检查这种与命令行的协作 java 是否有效。
String[] start = {"cmd.exe", "/c", "start", "notepad"};
Process runtimeProcess = Runtime.getRuntime().exec(start);
int processComplete = runtimeProcess.waitFor();
但是如果我尝试命令以管理员身份运行命令行失败:
String[] startAsAdmin= new String [] {
"CMD.EXE",
"/C",
"RUNAS /profile /user:"
+ "administrator"
+ " ", "start", "notepad"};
Process runtimeProcess = Runtime.getRuntime().exec(startAsAdmin);
runtimeProcess.waitFor();
BufferedReader stdInput = new BufferedReader(new
InputStreamReader(runtimeProcess.getInputStream()));
BufferedReader stdError = new BufferedReader(new
InputStreamReader(runtimeProcess.getErrorStream()));
BufferedWriter stdOutput = new BufferedWriter(new
OutputStreamWriter(runtimeProcess.getOutputStream()));
读取命令的输出并将我的原始密码输入命令行 需要密码时(Zadejte heslo pro 管理员表示需要英文密码)
System.out.println("Here is the standard output of the command:\n");
String s = null;
while ((s = stdInput.readLine()) != null) {
System.out.println(s);
if (s.startsWith("Zadejte heslo pro administrator:")) {
stdOutput.append("password").flush();
}
}
为什么如果我将我的原始密码输入这样的命令行它不起作用?它说访问被拒绝,但我确定密码是正确的,下一个问题是有没有什么可能的方法在不显示密码的情况下如何做到这一点?
哦,对不起,我现在看到了你的更新,但它仍然没有启动记事本:
String[] startAsAdmin= new String [] {
"CMD.EXE",
"/C",
"echo password123 | RUNAS /profile /user:"
+ "administrator"
+ " ", "start", "notepad"};
Process runtimeProcess = Runtime.getRuntime().exec(startAsAdmin);
int processComplete = runtimeProcess.waitFor();
【问题讨论】:
标签: java windows command-line windows-services administrator