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.
źródło
Odpowiedzi:
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.
źródło
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:
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:
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”):
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%
: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”):
źródło