【问题标题】:Run command line as administrator in Java and stop windows service在 Java 中以管理员身份运行命令行并停止 windows 服务
【发布时间】: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


    【解决方案1】:

    你应该试试这个:

    String[]  stopAdmin= new String [] {
        "CMD.EXE",
        "/C",
        "echo password123 | RUNAS /profile /user:"
        + "administrator"
        + " ", "net", "stop", Service_Name};
    
    Process runtimeProcess = Runtime.getRuntime().exec(stopAdmin);
    

    希望这会有所帮助。

    【讨论】:

    • 有没有不需要密码的解决方案?当我尝试 String[] stopAdmin= new String [] { "CMD.EXE", "/C", "RUNAS /profile /saved /user:" + "administrator" + "password" +"start"+ "notepad "};例如,这仍然无法运行,您能告诉我如何正确输入密码吗?
    • 我认为没有办法在没有密码的情况下运行管理员命令。 .最多您可以使用 /savecred 选项输入一次密码。查看更新的答案
    • oukey thanx 但我仍然不知道我必须在哪里输入密码....."administrator" + "password123" ??....因为当我把我的真实密码放在这里时还是不行还是我必须把它放在别的地方?或有一些空间或?
    • 如果它运行正常,你会像在正常情况下一样收到密码提示
    猜你喜欢
    • 1970-01-01
    • 2015-10-09
    • 2011-08-22
    • 2013-02-15
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多