通过java程序以管理员身份运行cmd命令

olqngx59  于 2022-12-25  发布在  Java
关注(0)|答案(1)|浏览(614)

我需要建立一个java程序来重置网络在windows 10中,这个命令需要cmd作为管理员打开我试图建立它,但它给我这个错误

Cannot run program "runas /profile /user:Administrator "cmd.exe /c Powrprof.dll,SetSuspendState"": CreateProcess error=2, The system cannot find the file specified

这是我的密码

try {
            String[] command
                    = {
                        "runas /profile /user:Administrator \"cmd.exe /c Powrprof.dll,SetSuspendState\"",};
            Process p = Runtime.getRuntime().exec(command);
            new Thread(new SyncPipe(p.getErrorStream(), System.err)).start();
            new Thread(new SyncPipe(p.getInputStream(), System.out)).start();
            PrintWriter stdin = new PrintWriter(p.getOutputStream());
            stdin.println("netsh winsock reset");
            stdin.close();
            int returnCode = p.waitFor();
            System.out.println("Return code = " + returnCode);

            stat_lbl.setText("Network reset Successfully");

        } catch (IOException | InterruptedException e) {
            System.out.println(e.getMessage());
        }

我不知道问题是什么,如何解决

gmxoilav

gmxoilav1#

你给出的命令是一个只有一个元素的数组,它被当作一个命令来处理;你已经给出了一个数组--相应地拆分它,其中runas是命令,其他的都是runas的参数:

String[] command = {
        "runas",
        "/profile",
        "/user:Administrator",
        "cmd.exe /c Powrprof.dll,SetSuspendState",
};

请注意,您不必在最后一个参数上加引号。
使用ProcessBuilder可以使程序更好一些,现在您自己重定向流,但可以轻松地让ProcessBuilder为您处理:

Process p = new ProcessBuilder(command).inheritIO().start();
PrintWriter stdin = new PrintWriter(p.getOutputStream());
stdin.println("netsh winsock reset");
stdin.close();
int returnCode = p.waitFor();
System.out.println("Return code = " + returnCode);

相关问题