
Я создал пакетный скрипт (просмотреть полностью здесь) для запуска сначала некоторых служб, а затем приложения. После завершения приложения пакет должен, GOTO somewhere
но он ждет выхода программы, чтобы продолжить работу.
Заголовок для запуска приложения и продолжения:
:vmSTARTAPP
"C:\Program Files (x86)\VMware\VMware Workstation\vmware.exe"
IF NOT %BACK%==NULL GOTO %BACK%
GOTO STARTAPPCONT
Этот заголовок вызывается из другого заголовка:
:STARTAPP
cls
echo Starting Application
GOTO %BATCH%
%BATCH%
содержит имя следующего заголовка — в приведенном выше случае vmSTARTAPP
.
Если запустить его из нового окна командной строки, он работает нормально, но не в этом пакете.
Что я делаю не так?
P.S. Не отсылайте этот вопрос к моему предыдущему вопросу. Это совсем другой случай.
решение1
Не могли бы вы попробовать заменить строки, которые показывают
:vmSTARTAPP
"C:\Program Files (x86)\VMware\VMware Workstation\vmware.exe"
с
:vmSTARTAPP
start "Starting VMWare" /B "C:\Program Files (x86)\VMware\VMware Workstation\vmware.exe"
Я предполагаю, что вы хотите запустить VMWare в фоновом режиме и продолжить работу без остановки, и, теоретически, это должно сработать.
Команда start
указывает DOS выполнить переданную вами команду (в данном случае «C:\Program Files (x86)\VMware\VMware Workstation\vmware.exe») и по умолчанию не ждет возврата переданной вами команды, а вместо этого запускает ее в отдельном процессе.
По умолчанию каждая строка в пакетном файле запускается последовательно и ждет выполнения каждой строки и возврата, прежде чем перейти к следующей строке. Команда start
обходит это, запуская программу, которую вы ей передаете, в отдельном процессе (окне DOS), и поэтому ваш пакетный файл встречает эту строку, запускает ее как обычно, видит, что команда start
вернулась (после создания нового процесса для запуска вашей команды), и ваш пакетный файл продолжает работу, как будто ничего неожиданного не произошло.
Заголовок "Starting VMWare"
— это просто заголовок, только что созданное окно DOS имело бы этот заголовок, если бы не аргумент, /B
который говорит ему не показывать новое окно DOS. Заголовок как бы необходим, но как бы необязателен, и у меня были редкие моменты WTF в скриптах без него, но такие случаи — скорее исключение, чем правило.
Более подробную информацию о команде «Пуск» можно найти здесь:http://ss64.com/nt/start.html