Я пытаюсь автоматизировать некоторые процессы, которые были построены в древние времена, ради избежания повторяющихся действий. Требуется, чтобы процессы запускались с одной партией и останавливались с другой (это не может быть изменено кстати).Проблема с запуском cmd.exe дважды в строке
Итак, я сделал инструмент командной строки для этого (и много других повторяющихся вещей), и я смоделировал команду, которая запускает «startbatch» и команду, запускающую «stopbatch». Обе команды работают отлично друг от друга (поскольку я тестировал их отдельно), но, похоже, проблема возникает, когда я хочу выполнять их один за другим (в правильном порядке). Я получаю следующую ошибку в новом окне cmd.exe:
Процесс не может получить доступ к файлу, потому что он используется другим процессом.
код, который я использую для запуска партий выглядит следующим образом:
public void startBatchInDev(String company){
String startBatchFolder = locations.getLocationFor("startbatch");
try{
Runtime runtime = Runtime.getRuntime();
runtime.exec("cmd.exe /C cd \"" + startBatchFolder + "\" & start cmd.exe /k \"" + BATCHSTART + company.toLowerCase()+ "-dev" + BATCH_SUFFIX + "\"");
}
catch(IOException ioe){
ioe.printStackTrace();
}
}
public void stopBatchInDev(String company){
String startBatchFolder = locations.getLocationFor("startbatch");
try{
Runtime runtime = Runtime.getRuntime();
runtime.exec("cmd.exe /C cd \"" + startBatchFolder + "\" & start cmd.exe /k \"" + BATCHSTOP + company.toLowerCase()+ "-dev" + BATCH_SUFFIX + "\"");
}
catch(IOException ioe){
ioe.printStackTrace();
}
}
Имена batchfiles сцепляются, но они в порядке, как только приложение запущено.
Сообщение об ошибке довольно ясно, некоторые файлы заблокированы, и я не могу получить к нему доступ из-за этого. Некоторые поисковые запросы подтверждают мои подозрения, но я не могу найти решение для этого. Хиты в google - все о очевидном использовании файлов, таких как очевидный общий ресурс. Но в моем случае я не работаю над одним и тем же командным файлом. Пакет остановки и запуска - это два разных файла. Поэтому я действительно начинаю думать, что это может быть файл cmd.exe, который блокируется окнами ...
Так что этот вопрос на самом деле два вопроса: - в чем же причина описанной проблемы? - как я программно исправляю это (если возможно)?
благодарит заранее!
Вы можете попробовать инструмент, как 'HTTP: // www.nirsoft.net/Utils/opened_files_view.html' чтобы выяснить, что происходит. – Gene
@Gene спасибо. Я попробую сразу. Я обновлю статус, когда узнаю больше. – anothernoc
Прочитайте (и внесите) * все * рекомендации [Когда Runtime.exec() не будет] (http://www.javaworld.com/jw-12-2000/jw-1229-traps.html). Это может решить проблему. Если нет, он должен предоставить дополнительную информацию о причине отказа. Затем проигнорируйте, что он ссылается на 'exec' и создает' Process' с помощью 'ProcessBuilder'. Также разбивайте 'String arg' на' String [] args' для учета аргументов, которые сами содержат пробелы. –