Почему Runtime.getRuntime (). Exec () в Java не может найти «chgport.exe»? - PullRequest
0 голосов
/ 25 октября 2018

В Java я пытался запустить:
Process p = Runtime.getRuntime().exec("C:\\Windows\\System32\\chgport.exe");
, а также
Process p = Runtime.getRuntime().exec("chgport.exe");

, но получил следующее исключение:

java.io.IOException: не удается запустить программу "C: \ Windows \ System32 \ chgport.exe": ошибка CreateProcess = 2, система не может найти указанный файл

Я использую NetBeansIDE и он работает с учетными данными администратора.

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Вы можете запустить его с помощью CMD /C, который «выполняет команду, указанную в строке, а затем завершается».

Process p = Runtime.getRuntime().exec("CMD /C chgport.exe");
0 голосов
/ 25 октября 2018

Я попробовал ваш код и он работает нормально. Попробуйте это так:

String[] command = {"chgport"};
ProcessBuilder pb = new ProcessBuilder(command);
pb.directory(new File("C:/Windows/System32/"));
pb.redirectErrorStream(true);
Process p = pb.start();

Я попробовал оба метода из Eclipse, и оба работают нормально. Возможно ли, что вы не используете IDE с правами администратора?
Можете ли вы попробовать закрыть IDE и щелкнуть правой кнопкой мыши на "Запуск от имени администратора"?

    try {
        Process p = Runtime.getRuntime().exec("C:\\Windows\\System32\\mspaint.exe");
        p.waitFor();

        String[] command = {"mspaint"};
        ProcessBuilder pb = new ProcessBuilder(command);
        pb.directory(new File("C:/Windows/System32/"));
        pb.redirectErrorStream(true);
        Process p2 = pb.start();

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...