Як запустити процес у фоновому режимі, не зберігаючи пакетний файл відкритим?


9

У мене є служба Windows (сервер інтеграції Bamboo), який запускає пакетний файл як підпроцес (завдання збірки) цього сценарію. У цьому пакетному файлі я хотів би мати змогу запустити процес (назвемо його workingprocess.exe) і мати цей процес у фоновому режимі. Це все добре, я використав:

start "title" /B workerprocess.exe

Це все добре і добре. Проблема полягає в тому, що це означає стримування завершення роботи зі збирання. Таким чином, пакетний сценарій закінчується, але через підпроцес Workingprocess.exe служба (Bamboo) не знає, що вона закінчилася: вона все ще чекає (і відображає вихід з) workerprocess.exe.

Я переглянув документацію команди start, і я не бачу нічого, що робить те, що я хочу. Я бачив це запитання, але воно теж не допомогло - служба все ще закінчує очікування завершення процесу.

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


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

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

Відповіді:


2

Ви пробували прихований старт (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 запущеного process.If id процесу Не приховано деякі параметри, такі як координати 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.