Как запустить процесс в фоновом режиме, не открывая пакетный файл?

18044
Jack Scott

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

start "title" /B workerprocess.exe 

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

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

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

6
Вы пробовали это без параметра "/ B", чтобы он не запускал процесс в том же командном окне? Josh 11 лет назад 1
@JoshR, это изменило ситуацию. Служба больше не получает выходные данные процесса, но все еще блокируется им. Jack Scott 11 лет назад 0

2 ответа на вопрос

2
Sun

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

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

Когда я написал свой ответ в сентябре 2013 года, продукт был бесплатным. К сожалению, они устанавливают цену. Sun 7 лет назад 0
2
npocmaka

All linked scripts can be downloaded and saved with whatever name you find convenient.

1) The IEXPRESS solution - as arguments accepts only the command and its arguments.

Example usage:

call hidder.bat myBat.bat myexe.exe call myexe.exe 

2) SCHTASKS - Again accepts only two arguments - the command and the arguments.Also checks if it's started with elevated permissions and if possible gets the PID of the process with WEVTUTIL command.

Example usage:

call SCHPhidden.bat "cmd /c myBat.bat" "argument" 

3) 'WScript.Shell' - the script is full wrapper of 'WScript.Shell' and every possible option can be set through the command line options.It's a jscript/batch hybrid and can be called as a bat.

Example usage (for more info print the help with '-h'):

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

4) 'Win32_ProcessStartup' - again full wrapper and all options are accessible through the command line arguments.This time it's WSF/batch hybrid with some Jscript and some VBScript pieces of code - but it returns the PID of the started process.If process id not hidden some options like X/Y coordinates can be used.

Example usage (for more info print the help with '-h').This will require the full path to the executable/script if it is not in the %path%:

call win32process.bat "notepad" -arguments "/A openFile.txt" -showWindow 0 -title "notepad" 

5) The .NET solution . Most of the options of ProcessStartInfo options are used (but at the end I was too tired to include everything).Should return the PID but it does not:

Example usage (for more info print the help with '-h'):

call ProcessStartJS.bat "notepad" -arguments "/A openFile.txt" -style Hidden -directory "." -title "notepad" -priority Normal 
Ссылка не найдена Rahil Wazir 9 лет назад 0
@rahilwazir - отредактировано. npocmaka 9 лет назад 0
Я попробовал это немного - я думаю, что детали должны быть убраны БОЛЬШАЯ сделка. Просто рассмотрим первый подход: IExpress, ссылка на hidder.bat, в приведенном выше примере используется что-то еще. Когда я запустил скрипт, он не смог запросить EXE, который не упомянут выше. Это может быть хорошо, если на github была уценка, но ее нет. Наконец, при его запуске появилось несколько файлов .DDF, но больше ничего .... JoeG 8 лет назад 1