Как запустить процесс в фоновом режиме, не открывая пакетный файл?
У меня есть служба Windows (сервер интеграции Bamboo), которая запускает пакетный файл как подпроцесс (задание сборки) этого сценария. В этом пакетном файле я хотел бы иметь возможность запустить процесс (назовем его workerprocess.exe) и запустить этот процесс в фоновом режиме. Это все хорошо, я использовал:
start "title" /B workerprocess.exe
Это все хорошо. Проблема в том, что это задерживает завершение задания сборки. Таким образом, пакетный сценарий завершается, но из-за подпроцесса workerprocess.exe служба (Bamboo) не знает, что она завершила: она все еще ожидает (и отображает выходные данные) workerprocess.exe.
Я посмотрел в документации для команды запуска, и я не вижу ничего, что делает то, что я хочу. Я видел этот вопрос, но на самом деле это тоже не помогло - служба все равно заканчивается ожиданием завершения процесса.
Итак, я подытожу в итоге: как я могу запустить новый процесс из пакетного сценария, чтобы он был полностью отсоединен и не содержал ничего, что, как оказалось, ожидает завершения этого пакетного сценария.
2 ответа
Вы пробовали Hidden Start (HSTART)? (Стоит 20 долларов)
Я использую это лично, чтобы запустить почасовую пакетную работу со скрытым окном. Они также упоминают, что вы можете запускать команды последовательно как параметр (или, по-моему, по умолчанию), запускаемый асинхронно. Я не знаю, как это повлияет на вашу конкуренцию с процессором, памятью или диском... но программное обеспечение также дает вам возможность подождать некоторое время, прежде чем выполнять действие.
Все связанные скрипты могут быть загружены и сохранены под любым удобным вам именем.
1) Решение IEXPRESS - в качестве аргументов принимает только команду и ее аргументы.
Пример использования:
call hidder.bat myBat.bat myexe.exe
call myexe.exe
2) SCHTASKS - снова принимает только два аргумента - команду и аргументы. Также проверяет, запущен ли он с повышенными правами и, если возможно, получает PID процесса с помощью команды WEVTUTIL.
Пример использования:
call SCHPhidden.bat "cmd /c myBat.bat" "argument"
3) 'WScript.Shell' - скрипт является полной оболочкой для 'WScript.Shell', и каждый возможный параметр может быть установлен через параметры командной строки. Это гибрид jscript/batch и может быть вызван как bat.
Пример использования (для получения дополнительной информации напечатайте справку с '-h'):
call ShellRunJS.bat "notepad.exe" -style 0 -wait no
4) "Win32_ProcessStartup" - снова полная оболочка и все опции доступны через аргументы командной строки. На этот раз это WSF/ пакетный гибрид с некоторым Jscript и некоторыми фрагментами кода VBScript - но он возвращает PID запущенного процесса. Если идентификатор процесса не скрыты некоторые параметры, такие как координаты X/Y.
Пример использования (для получения дополнительной информации напечатайте справку с '-h'). Для этого потребуется полный путь к исполняемому файлу / скрипту, если его нет в %path%
:
call win32process.bat "notepad" -arguments "/A openFile.txt" -showWindow 0 -title "notepad"
5). NET решение. Используются большинство параметров ProcessStartInfo (но в конце концов я слишком устал, чтобы включать все). Должен вернуть PID, но это не так:
Пример использования (для получения дополнительной информации напечатайте справку с '-h'):
call ProcessStartJS.bat "notepad" -arguments "/A openFile.txt" -style Hidden -directory "." -title "notepad" -priority Normal