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


9

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

start "title" /B workerprocess.exe

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

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

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


1
Вы пробовали это без параметра "/ B", чтобы он не запускал процесс в том же командном окне?
Джош

@JoshR, это изменило ситуацию. Служба больше не получает выходные данные процесса, но все еще блокируется им.
Джек Скотт

Ответы:


2

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

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


Когда я написал свой ответ в сентябре 2013 года, продукт был бесплатным. К сожалению, они устанавливают цену.
Вс

3

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

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 (но в конце я слишком устал, чтобы включать все):

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

call ProcessStartJS.bat "notepad" -arguments "/A openFile.txt"  -style Hidden -directory "." -title "notepad" -priority Normal

Ссылка не найдена
Рахиль Вазир

@rahilwazir - отредактировано.
npocmaka

1
Я попробовал это немного - я думаю, что детали должны быть убраны БОЛЬШАЯ сделка. Просто рассмотрим первый подход: IExpress, ссылка на hidder.bat, в приведенном выше примере используется что-то еще. Когда я запустил скрипт, он не смог запросить у меня EXE, который не упомянут выше. Это может быть хорошо, если на github была уценка, но это не так. Наконец, при его запуске появилось несколько файлов .DDF, но больше ничего ...
JoeG
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.