Jak uruchomić proces w tle bez utrzymywania otwartego pliku wsadowego?

8

Mam usługę Windows (serwer integracyjny Bamboo), która uruchamia plik wsadowy jako podproces (zadanie budowania) tego skryptu. W tym pliku wsadowym chciałbym móc uruchomić proces (nazwijmy go workerprocess.exe) i uruchomić ten proces w tle. To wszystko jest dobre, użyłem:

start "title" /B workerprocess.exe

To wszystko dobrze i dobrze. Problem polega na tym, że wstrzymuje to wykonanie zadania kompilacji. Tak więc skrypt wsadowy kończy się, ale z powodu podprocesu workerprocess.exe usługa (Bamboo) nie wie, że została zakończona: nadal czeka na (i wyświetla wynik) pracownika workerprocess.exe.

Przejrzałem dokumentację polecenia start i nie widzę niczego, co robi to, co chcę. widziałem to pytanie ale to też nie pomogło - usługa wciąż czeka na zakończenie procesu.

Podsumowując: jak mogę uruchomić nowy proces ze skryptu wsadowego, aby był całkowicie odłączony i nie wstrzymuje niczego, co akurat czeka na zakończenie skryptu wsadowego.

Jack Scott
źródło
1
Czy próbowałeś tego bez parametru „/ B”, aby nie rozpoczął procesu w tym samym oknie poleceń?
Josh
@JoshR, to się zmieniło. Usługa nie otrzymuje już danych wyjściowych z procesu, ale nadal jest przez niego blokowana.
Jack Scott

Odpowiedzi:

2

Czy próbowałeś Ukryty początek (HSTART) ? (Koszt 20 USD)

Używam go osobiście do wykonywania godzinowego zadania wsadowego z ukrytym oknem. Wspominają również, że można uruchamiać polecenia sekwencyjnie, ponieważ parametr (lub domyślnie zakładam) działa asynchronicznie. Nie wiem, w jaki sposób wpłynie to na rywalizację o procesor, pamięć lub dysk ... ale oprogramowanie daje również możliwość oczekiwania przez pewien czas przed wykonaniem akcji.

Sun
źródło
Kiedy napisałem swoją odpowiedź we wrześniu 2013 r., Produkt był dostępny dookoła. Niestety pobierają opłatę.
Sun
2

Wszystkie połączone skrypty można pobrać i zapisać z dowolną wygodną nazwą.

1) The WYRAŻAM rozwiązanie - jako argumenty przyjmuje tylko polecenie i jego argumenty.

Przykładowe użycie:

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

2) SCHTASKS - Ponownie akceptuje tylko dwa argumenty - komendę i argumenty. Sprawdza również, czy zostało uruchomione z podwyższonymi uprawnieniami i jeśli to możliwe, pobiera PID procesu za pomocą komendy WEVTUTIL.

Przykładowe użycie:

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

3) „WScript.Shell” - skrypt jest pełnym opakowaniem „WScript.Shell” i każdą możliwą opcję można ustawić za pomocą opcji wiersza poleceń.

Przykładowe użycie (aby uzyskać więcej informacji, wydrukuj pomoc za pomocą „-h”):

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

4) „Win32_ProcessStartup” - znowu pełny wrapper i wszystkie opcje są dostępne poprzez argumenty wiersza poleceń. Tym razem jest to hybrydowy WSF / wsadowy z niektórymi kodami Jscript i niektórymi fragmentami kodu VBScript - ale zwraca PID uruchomionego procesu. Jeśli identyfikator procesu nie jest ukryty, niektóre opcje, takie jak Można użyć współrzędnych X / Y.

Przykładowe użycie (aby uzyskać więcej informacji, wydrukuj pomoc z '-h'). Będzie to wymagało pełnej ścieżki do pliku wykonywalnego / skryptu, jeśli nie ma go w %path%:

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

5) The. Rozwiązanie NET . Większość opcji opcji ProcessStartInfo jest używanych (ale na koniec byłem zbyt zmęczony, aby wszystko uwzględnić). Powinien zwrócić PID, ale nie:

Przykładowe użycie (aby uzyskać więcej informacji, wydrukuj pomoc za pomocą „-h”):

call ProcessStartJS.bat "notepad" -arguments "/A openFile.txt"  -style Hidden -directory "." -title "notepad" -priority Normal
npocmaka
źródło
Link nie został znaleziony
Rahil Wazir
@rahilwazir - edytowane.
npocmaka
1
Próbowałem tego trochę - myślę, że szczegóły muszą zostać wyczyszczone WIELKĄ transakcją. Wystarczy spojrzeć na pierwsze podejście: IExpress, link ma na celu ukryć.bat powyższy przykład używa czegoś innego. Po uruchomieniu skryptu nie powiodło się pytanie o plik EXE, który nie został wymieniony powyżej. To może być w porządku, jeśli na github był przecen, ale nie ma. Wreszcie uruchomienie go dało kilka plików .DDF, ale nic więcej ....
JoeG