Wiem, że już odpowiedziałem na podobne pytanie ( uruchamianie pliku wsadowego w tle podczas uruchamiania systemu Windows ), ale tym razem muszę uruchomić plik wsadowy:
- z innej partii,
- bez wyświetlania żadnego okna konsoli,
- ze wszystkimi argumentami przekazanymi do niewidocznej wiązki.
Pierwsza partia jest wykonywana w oknie konsoli. Jednak nie chcę, aby druga partia (uruchamiana przez pierwszą w sposób asynchroniczny ) również wyświetlała okno konsoli.
Wymyśliłem skrypt VBScript, który właśnie to robi i umieściłem skrypt jako odpowiedź, do której inni mogą się odwoływać , ale jeśli masz inne pomysły / rozwiązania, nie krępuj się.
Uwaga: Wiele osób nazywa okno konsoli procesora poleceń systemu Windows jako niepoprawne okno DOS.
Dziękuję wszystkim za odpowiedzi. Z tego co rozumiem, jeśli potrzebuję asynchronicznie wywołać skrypt do uruchomienia w trybie niewidocznym:
- Z drugiego skryptu już w oknie konsoli,
start /b
wystarczy. - Z systemu Windows, bez uruchamiania drugiego okna , moje rozwiązanie jest nadal aktualne.
źródło
Odpowiedzi:
Czy potrzebujesz drugiego pliku wsadowego do asynchronicznego działania? Zwykle jeden plik wsadowy jest uruchamiany synchronicznie z
call
poleceniem, a drugi współużytkuje pierwsze okno.Państwo może używać
start /b
second.bat do uruchomienia drugiego pliku wsadowego synchronicznie z Twoja pierwsza że akcja Twojego Pierwszym z nich jest okno. Jeśli oba pliki wsadowe zapisują się na konsoli jednocześnie, dane wyjściowe będą się nakładać i prawdopodobnie nie będzie można ich odczytać. Ponadto będziesz chciał umieścić polecenie na końcu drugiego pliku wsadowego lub będziesz w drugiej powłoce, gdy wszystko zostanie wykonane.exit
cmd
źródło
Oto możliwe rozwiązanie:
Z pierwszego skryptu wywołaj drugi skrypt za pomocą następującego wiersza:
Właściwie to wywołujesz skrypt VBS z:
%*
)Następnie invis.vbs wywoła skrypt za pomocą metody Windows Script Host Run () , która pobiera:
Oto invis.vbs:
źródło
Przekonwertuj plik wsadowy na exe. Wypróbuj Bat To Exe Converter lub Online Bat To Exe Converter i wybierz opcję uruchomienia go jako aplikacji-widma, tj. Bez okna.
źródło
Myślę, że jest to najłatwiejsze i najkrótsze rozwiązanie do uruchomienia pliku wsadowego bez otwierania okna DOS, może to być bardzo rozpraszające, gdy chcesz zaplanować okresowe uruchamianie zestawu poleceń, więc okno DOS ciągle się pojawia, oto twoje rozwiązanie . Użyj skryptu VBS, aby wywołać plik wsadowy ...
Skopiuj powyższe wiersze do edytora i zapisz plik z rozszerzeniem .VBS. Zmień odpowiednio nazwę i ścieżkę pliku .BAT.
źródło
Set WshShell = Nothing
, działało dobrze dla mnie i możesz mieć jeszcze mniejszy sposób, aby to zrobić.Oto moja kolekcja sposobów, aby to osiągnąć - a nawet więcej - tam, gdzie było to możliwe, próbowałem zwrócić również PID uruchomionego procesu (wszystkie połączone skrypty można pobrać i zapisać pod dowolną nazwą, którą uznasz za dogodną):
1) Rozwiązanie IEXPRESS może być używane nawet na starych maszynach z systemem Windows 95/98. Iexpress to naprawdę starożytne narzędzie, które wciąż jest dostarczane z systemem Windows - jako argumenty akceptuje tylko polecenie i jego argumenty.
Przykładowe użycie:
2) SCHTASKS - ponownie przyjmuje tylko dwa argumenty - polecenie i argumenty, sprawdza również, czy zostało uruchomione z podwyższonymi uprawnieniami i jeśli to możliwe, pobiera PID procesu z WEVTUTILEM (dostępne od Visty i wyższych, więc nowsza wersja systemu Windows otrzyma PID).
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ń.Jest to hybryda jscript / batch i można go nazwać nietoperzem.
Przykładowe użycie (aby uzyskać więcej informacji, wypisz pomoc z '-h'):
4) `` Win32_ProcessStartup '' - ponownie pełne opakowanie i wszystkie opcje są dostępne za pośrednictwem argumentów wiersza poleceń, tym razem jest to hybryda WSF / batch z niektórymi fragmentami kodu Jscript i VBScript - ale zwraca PID uruchomionego procesu. nie ukryte, można użyć niektórych opcji, takich jak współrzędne X / Y (nie dotyczy to każdego pliku wykonywalnego - ale na przykład cmd.exe akceptuje współrzędne).
Przykładowe użycie (aby uzyskać więcej informacji, wypisz pomoc z '-h'):
5). Rozwiązanie .NET . Większość opcji opcji ProcessStartInfo jest wykorzystywana (ale na koniec byłem zbyt zmęczony, aby wszystko zawrzeć):
Przykładowe użycie (aby uzyskać więcej informacji, wypisz pomoc z '-h'):
źródło
W drugim pytaniu zasugerowałem autoexnt . Jest to również możliwe w tej sytuacji. Po prostu ustaw usługę tak, aby była uruchamiana ręcznie (tj. Nie automatycznie podczas uruchamiania). Jeśli chcesz uruchomić wsad, zmodyfikuj plik autoexnt.bat, aby wywołać żądany plik wsadowy, i uruchom usługę autoexnt.
Plik wsadowy do rozpoczęcia tego może wyglądać następująco (nieprzetestowany):
Zwróć uwagę, że pliki wsadowe uruchomione w ten sposób działają jako użytkownik systemu, co oznacza, że nie masz automatycznego dostępu do udziałów sieciowych. Ale możesz użyć funkcji net use, aby połączyć się ze zdalnym serwerem.
Trzeba pobrać Windows 2003 Resource Kit , aby je zdobyć. Zestaw Resource Kit można również zainstalować w innych wersjach systemu Windows, takich jak Windows XP.
źródło
Uruchom go pod inną nazwą użytkownika, używając „runas” lub planując dla innego użytkownika w Zaplanowanych zadaniach systemu Windows.
źródło
Możesz uruchomić plik .bat za pośrednictwem pliku .vbs.
Skopiuj następujący kod do pliku .vbs:
źródło
Możesz także użyć
PS: Niestety, stan zminimalizowanego okna zależy od polecenia do uruchomienia. VG nie działa
źródło