8

У меня есть служба Windows (сервер интеграции Bamboo), которая запускает пакетный файл как подпроцесс (задание сборки) этого сценария. В этом пакетном файле я хотел бы иметь возможность запускать процесс (назовем его workerprocess.exe) и запускать этот процесс в фоновом режиме. Это все хорошо, я использовал:

start "title" /B workerprocess.exe

Это все хорошо. Проблема заключается в том, что это задерживает выполнение задания сборки. Таким образом, пакетный сценарий завершается, но из-за подпроцесса workerprocess.exe служба (Bamboo) не знает, что она завершила: она все еще ожидает (и отображает выходные данные) workerprocess.exe.

Я посмотрел в документации для команды запуска, и я не вижу ничего, что делает то, что я хочу. Я видел этот вопрос, но на самом деле это тоже не помогло - служба все равно заканчивается ожиданием завершения процесса.

Итак, я подытожу в итоге: как я могу запустить новый процесс из пакетного сценария, чтобы он был полностью отделен и не удерживал ничего, что, как оказалось, ожидает завершения этого пакетного сценария.

2 ответа2

2

Вы пробовали Hidden Start (HSTART)? (Стоит 20 долларов)

Я использую это лично, чтобы запустить почасовую пакетную работу со скрытым окном. Они также упоминают, что вы можете запускать команды последовательно как параметр (или, по-моему, по умолчанию), запускаемый асинхронно. Я не знаю, как это повлияет на вашу конкуренцию с процессором, памятью или диском ... но программное обеспечение также дает вам возможность подождать некоторое время, прежде чем выполнять действие.

2

Все связанные скрипты могут быть загружены и сохранены под любым удобным вам именем.

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, который можно назвать битой.

Пример использования (для получения дополнительной информации выведите справку с помощью '-h'):

call ShellRunJS.bat "notepad.exe" -style 0 -wait no 

4) 'Win32_ProcessStartup' - снова полная оболочка и все параметры доступны через аргументы командной строки.На этот раз это гибрид WSF/batch с некоторыми фрагментами кода 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .