Ответы:
Если приложение Java не завершает работу (например, вы используете командный файл для запуска приложения Java), используйте start
команду для его запуска: -
start "" "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar
Это запустит приложение Java и продолжит выполнение командного файла, не дожидаясь завершения приложения Java.
Объяснение:
Вот как это работает; пакетный файл обрабатывается по одной строке за раз. Каждая команда выполняется по очереди, и пакетный процессор ожидает завершения одной команды, а затем запускает следующую. Проблема, с которой вы столкнулись, заключается в том, что запускаемое вами Java-приложение (Jilko.jar) является оконной программой, которая продолжает работать даже после запуска строки. Если бы это был инструмент, который выполняет какое-то действие, а затем завершает работу, пакетный файл продолжит выполнение следующей команды (или завершит работу, если их больше нет). Поскольку программа все еще работает, пакетный процессор ждет, пока окно не закроется, прежде чем двигаться дальше. Вы можете увидеть это в действии, выйдя из Java-программы: окно консоли с командным файлом затем закроется.
Решение:
Что вам нужно сделать, чтобы это исправить, это дать команду пакетному процессору запустить программу и продолжить работу без ожидания, как таковой:
start "" "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar
Как упомянул Terrance , ""
заголовок для окна консоли. Однако это только необязательно, если команда не в кавычках; в противном случае требуется . Вы можете поместить что-то туда, если хотите, или оставить это пустым, но если команда в кавычках, она должна присутствовать, в противном случае интерпретатор команды будет рассматривать команду в кавычках как заголовок и откроет консоль, которая просто сидит в ожидании что-нибудь сделать.
Вместо этого вы можете использовать что-то в следующей команде, но кавычки проще и безопаснее, поскольку не гарантируется, что короткие имена будут одинаковыми в каждой системе.
start C:\Progra~2\Java\jre6\bin\javaw.exe -Xmx1024M -Xms1024M -jar Jilko.jar
Эта start
команда является встроенной командой, которая порождает процесс (в основном, как запуск программы из меню «Пуск»). Так что в этом контексте происходит то, что пакетный процессор запускает start
команду, которая, в свою очередь, запускает указанную программу и завершает работу (сама по себе, а не порожденная программа). Таким образом, пакетный процессор продолжает работу, как и ожидалось. Он также имеет некоторые опции, которые могут быть полезны, такие как запуск программы minimized ( /min
) или maximized ( /max
), запуск с низким приоритетом ( /low
) и так далее. Смотрите start /?
подробности.
Я обнаружил, что некоторые программы, которые я запускаю, оставляют процессы запущенными, и окно консоли не будет закрываться, пока они не завершатся, если я просто запустите их, запустив исполняемый файл.
Программа START исправляет это, но старая проблема с START все еще существует. Вы не можете просто использовать:
START "c:\my dir\myfile.exe"
Первым параметром START остается имя окна. Если вы пропустите его, вы просто откроете консоль CMD с окном, в котором будет указано, что вы пытались запустить. В приведенном выше примере у меня теперь есть консольное окно с заголовком окна « c: \ my dir \ myfile.exe ». Не то, что я хотел!
Чтобы пропустить имя окна, просто используйте пару двойных кавычек для определения пустой строки, например:
START "" "c:\my dir\myfile.exe"
Наконец, завершите ваш командный файл командой EXIT, чтобы убедиться, что он закрывается.
Этот метод работает последовательно в Windows 7 и 8.
Для устранения неполадок я обнаружил, что добавление ECHO того, что я собираюсь сделать, и TIMEOUT того, что я только что сделал, очень помогает. Например:
ECHO I'm about to launch the program...
START "" "c:\my dir\myfile.exe"
TIMEOUT 5
Поскольку тайм-аут дает вам обратный отсчет, вам не нужно ECHO, что вы собираетесь отложить.
Также - всегда используйте EXIT , под Windows 7, так как простое получение до конца командного файла не обязательно прекращает его - как в более ранних версиях Windows. Windows 7 может быть более чувствительной к этому, чем более ранние версии NT (например, Windows 2000 Professional). Это упоминалось в некоторых, но не во всех предыдущих ответах.
Детали личного опыта в поддержку ответа:
После переноса установки StarOffice5.2 из Windows 2000 в Windows 7 я получал ошибки пространства памяти при завершении работы пакета. Это не было видно в Windows 2000.
Несколько лет назад я написал пакетные файлы для автоматического резервного копирования и восстановления soffice.ini, чтобы разрешить восстановление, если оно повреждено (достаточно часто, чтобы вызвать проблемы - пакет не загружается). Однако автоматическое резервное копирование (инициируемое ссылкой на командный файл, помещенное в Office52 \ user \ config \ startup) происходит только после 5-секундной задержки. Я заметил, что всякий раз, когда я выходил из пакета непосредственно перед запуском пакетного файла, завершение пакета проходило без ошибок. Это указало мне на проблему в пакетных файлах.
После того, как команда «EXIT» была помещена как последняя строка в пакетных файлах, офисный пакет начал завершаться без сообщений об ошибках пространства памяти, независимо от того, были запущены пакетные файлы или нет.
Я просто имел дело с той же проблемой, и она наконец разрешилась после внесения в пакетный файл того, что казалось случайным изменением - я не понимаю почему, но я опубликую это здесь на случай, если это поможет кому-то еще позже.
Я использую утилиту SysInternals Pskill и утилиту сна, так как XP Home не включает в себя многое с точки зрения функциональности командной строки.
Это пакетный файл, который фактически закрывается после того, как это сделано:
@echo off
start /min C:\Progra~1\PsTools\pskill.exe explorer.exe
start /min C:\Progra~1\PsTools\pskill.exe Powermenu.exe
start /min C:\Progra~1\PsTools\pskill.exe PWGen.exe
start /min C:\Progra~1\PsTools\pskill.exe redshiftgui.exe
start /min C:\Progra~1\PsTools\pskill.exe clipx.exe
sleep 2
start explorer.exe
sleep 3
start C:\Progra~1\ClipX\clipx.exe
sleep 1
start C:\Progra~1\Powermenu\PowerMenu.exe
sleep 1
start /min C:\Progra~1\PWGen\PWGen.exe
sleep 1
start C:\Progra~1\RedshiftGUI\redshiftgui.exe && exit
Если бы я изменил последние несколько строк следующим образом, окно cmd будет оставаться открытым, пока я не нажму «X» в углу:
start C:\Progra~1\RedshiftGUI\redshiftgui.exe
sleep 1
start /min C:\Progra~1\PWGen\PWGen.exe && exit
Даже когда я пытался вызвать pskill, чтобы убить себя, процесс cmd.exe исчезал из диспетчера задач, и pskill сообщал изнутри своего cmd.exe, что процесс cmd.exe был убит, но cmd.exe
окно все равно оставалось до тех пор, пока Я нажал «Х» в углу:
start C:\Progra~1\RedshiftGUI\redshiftgui.exe
sleep 1
start /min C:\Progra~1\PWGen\PWGen.exe
sleep 1
C:\Progra~1\PsTools\pskill.exe cmd.exe
После добавления && exit
каждой строки я заметил, что некоторые из них ответили на нее и прервали пакетную обработку, а другие - нет.
Так что я просто положил один из отзывчивых в конце вместо того, как у меня это было изначально.
Как я уже сказал, я не знаю почему, но я рад, что с этим покончено.
пытаться:
cmd /c "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar
Windows 2003 не имеет «учетных записей пользователей» в панели управления по умолчанию. Я написал короткий пакет, чтобы открыть учетные записи пользователей:
@echo off
rundll32.exe %SystemRoot%\system32\netplwiz.dll,UsersRunDll
exit
Все работало хорошо, учетные записи пользователей открылись, но окно CMD также оставалось открытым. После некоторого исследования я добавил: START "" в начало строки 2 примерно так:
@echo off
Start "" rundll32.exe %SystemRoot%\system32\netplwiz.dll,UsersRunDll o
exit
Теперь открывается окно «Учетные записи пользователей», остается открытым, а окно CMD закрывается. Очень просто.
Я создал командный файл net use на 32-битной машине с Windows 7, и cmd командного файла не завершится после выполнения. Я запускаю тот же командный файл на другом 64-разрядном компьютере с Windows 7, и cmd командного файла завершается нормально.
Я попробовал предложение Брайана, и оно не работает на этом 32-разрядном компьютере с Windows 7, потому что не было процесса conhost.exe, поэтому я изменил его следующим образом:
Taskkill /IM cmd.exe /F
Пакетный файл net use не всегда завершается нормально и показывает случайное подтверждение «Завершить пакетное задание (Y / N)» .
В соответствии с этой веткой я изменил командный файл следующим образом:
@echo off
if "%~1"=="-FIXED_CTRL_C" (
REM Remove the -FIXED_CTRL_C parameter
SHIFT
) ELSE (
REM Run the batch with <NUL and -FIXED_CTRL_C
CALL <NUL %0 -FIXED_CTRL_C %*
GOTO :EOF
)
net use \\Server\folder
Taskkill /IM cmd.exe /F
Пакетный файл net use в конце концов завершается нормально.
nohup
en.wikipedia.org/wiki/Nohup