Как Java может выполнять командный файл в отдельном дереве процессов - PullRequest
2 голосов
/ 11 марта 2012

Я пишу в Java-приложение механизм обновления.Я создаю пакетный файл Windows, закрываю свою программу, и пакетный файл продолжает удалять мой Jar, копировать новый из удаленного местоположения, запускать jar.Моя проблема: удаление + копирование работает, НО - приложение не запустится.Я думаю, проблема в том, что я не знаю, как заставить Java выполнять командный файл в отдельном дереве процессов.при запуске этого: Runtime.getRuntime () я открываю дочерний процесс.

Итак, мой вопрос - Как Java может выполнять командный файл в отдельном дереве процессов?

Ответы [ 3 ]

0 голосов
/ 11 марта 2012

Я полагаю, что ответ кроется в ссылке, которую предоставил Якуб Заверка. Используйте start вместо cmd для запуска пакетного файла. Это даст пакету собственное окно консоли.

0 голосов
/ 12 марта 2012

Я решил проблему.Это было связано с launch4j - программой, с которой я исказил свой JAR.Поскольку он разрешил один экземпляр, даже когда я удалил файл перед обновлением, он не позволил мне запустить новый экземпляр из командной строки, запущенной в рамках программы перед обновлением.Теперь я деформирую свою программу без проверки одного экземпляра, и она работает отлично!Спасибо всем за помощь!

Кстати - я проверяю один экземпляр с помощью этого решения - Как разрешить запускать только один экземпляр программы Java одновременно?

0 голосов
/ 11 марта 2012

Здесь - это обходной путь, использующий cmd в качестве промежуточного слоя:

public class Main {
    public static void main(String[] args) throws Exception {
        Process p = Runtime.getRuntime().exec("cmd /c c:\\test.bat");
    }
}

, где test.bat будет содержать

@echo off
PING 1.1.1.1 -n 1 -w 5000 >nul
java -jar "[path]"
...