В настоящее время у меня есть код, который выполняет задачу:
this.cmds = new String[] { "cmd.exe", "/c", customCmd };
ProcessBuilder pb = new ProcessBuilder(cmds);
try {
pb.start();
} catch (IOException e) {
e.printStackTrace();
}
Это работает отлично и делает то, что я ожидал.
Однако я хотел бы отображать видимое окно cmd при выполнении этой конкретной задачи.
Это возможно?
Спасибо за ваше время,
Бенна
Этот пост касается открытия командной строки Windows с помощью BAT-файла. Это не Java-программа. Когда я использую ту же логику, что и в этом сообщении, используя /k вместо /c, ничего не меняется, и окно строки cmd все еще выполняется в фоновом режиме.
Кажется, этот вопрос противоположен этому. У вас возникла проблема с тем, чтобы окно консоли было видимым, в то время как у автора другого вопроса возникла проблема с тем, чтобы окно консоли НЕ было видимым. Возможно, вам стоит поменяться местами работы!
@Бенна, решение применимо и к этому (с использованием аргумента /k
).
@aled ОП сказал: «... /k вместо /c ничего не меняется...», поэтому они ответили на ваш комментарий, и это не дубликат.
Этот вопрос похож на: Запустите CMD с помощью ProcessBuilder . В частности, используйте Runtime.exec()
вместо ProcessBuilder
, как указано в принятом ответе. Если вы считаете, что это другое, отредактируйте вопрос, поясните, чем он отличается и/или как ответы на этот вопрос не помогают решить вашу проблему.
Используйте эту строку:
this.cmds = new String[] { "cmd.exe", "/c", "start cmd.exe /k " + customCmd };
Первый "cmd.exe", "/c"
запускает невидимое окно, но затем внутри вы используете команду start cmd.exe /k ...
для создания видимого окна, и оно останется открытым из-за /k
.
Еще лучше было бы "start %ComSpec% /D /K "
или "start %SystemRoot%\\System32\\cmd.exe /D /K "
вместо "start cmd.exe /k "
, поскольку в этом случае первому запускаемому cmd.exe
не нужно искать второй для запуска cmd.exe
файл в файловой системе, а второй запущенный cmd.exe
не читает значение реестра AutoRun
. "/D"
в качестве дополнительного аргумента (опции) для первого запуска cmd.exe
до "/c"
также было бы полезно для предотвращения чтения значения реестра AutoRun
и его выполнения, если оно действительно существует.
"cmd.exe"
также следует заменить на System.getenv("ComSpec")
для вызова функции библиотеки ядра Windows CreateProcess с запуском исполняемого файла с его полным именем файла.
Спасибо, это сработало отлично и решило все мои проблемы :)
Этот вопрос похож на: BAT-файл: откройте новое окно cmd и выполните там команду. Если вы считаете, что это другое, отредактируйте вопрос, поясните, чем он отличается и/или как ответы на этот вопрос не помогают решить вашу проблему.