Uruchom plik wsadowy w całkowicie ukryty sposób

139

Szukam sposobu na uruchomienie pliku wsadowego (.bat) bez niczego widocznego dla użytkownika (bez okna, bez nazwy paska zadań, .etc ..).

Nie chcę używać do tego żadnego programu, szukam czegoś czystszego. Znalazłem rozwiązanie, które używa VBScript, ale tak naprawdę nie lubię używać VBS.

Moayad Mardini
źródło
Ha ha! Absolutnie nie. Zajmuję się tworzeniem usługi Windows, która od czasu do czasu uruchamia plik wsadowy.
Moayad Mardini
4
Usługi systemu Windows nie działają jako pliki wsadowe. Działają jako usługi. Musisz wyjaśnić pytanie - jak napisano i z komentarzami, nie ma dla mnie sensu.
CarlF,
1
Mam usługę Windows, która uruchamia pliki wsadowe. Nie chodzi o to, że usługa jest plikiem wsadowym.
Moayad Mardini
1
W jakim języku piszesz swoją usługę?
Hugh Allen
jest też hstart.
barlop

Odpowiedzi:

119

Rozwiązanie 1:

Zapisz ten jeden wiersz tekstu jako plik invisible.vbs:

CreateObject („Wscript.Shell”). Uruchom „” „” i WScript.Arguments (0) i „” „”, 0, False

Aby uruchomić dowolny program lub plik wsadowy niewidocznie, użyj go w następujący sposób:

wscript.exe „C: \ Wherever \ invisible.vbs” „C: \ Some Other Place \ MyBatchFile.bat”

Aby móc przekazywać / przekazywać listę argumentów, użyj tylko dwóch podwójnych cudzysłowów

CreateObject („Wscript.Shell”). Uruchom „” i WScript.Arguments (0) i „”, 0, False

Przykład: Invisible.vbs "Kill.vbs ME.exe"

Rozwiązanie 2:

Użyj narzędzia wiersza polecenia, aby cicho uruchomić proces: Quiet , hidecon lub hideexec .

harrymc
źródło
2
Dlaczego 4 podwójne cytaty, czy mógłbyś wyjaśnić?
Starx
Co jeśli będziemy musieli uruchomić ukryty program?
Starx
5
Składnia @Starx VB. &oznacza konkatenację łańcuchów. Ciągi są ujęte w podwójne cudzysłowy ( "). Kolejne podwójne cudzysłowy ( "") wewnątrz ograniczników ciągów oznaczają dosłowne podwójne cudzysłowy ( "). Tak więc cztery podwójne cudzysłowy ( """") byłyby dosłownym ciągiem jednego znaku, podwójnego cudzysłowu ( "). Złóż go razem, i """" & WScript.Arguments(0) & """"stanie się "<argument>", gdzie <argument>jest pierwszy argument wiersza poleceń przekazywany do skryptu.
Bob
4
Jak go zmodyfikować, aby przekazał wszystkie argumenty? Wygodniej byłoby przekazać argumenty bez ich cytowania.
Ctrl-C
2
Czy nadal nie wymaga to utworzenia pliku wsadowego do umieszczenia w wscript.exe "C:\Wherever\invisible.vbs" ...środku?
endolith
26

Aby ukryć pliki wsadowe lub pliki poleceń lub dowolne pliki ... Użyj wbudowanego IExpress.exenarzędzia systemu Windows XP , aby zbudować plik .EXE z pliku wsadowego. Korzystając z IExpresstej opcji, zaznacz opcję Uruchom ukryty i zaznacz wszystkie pola, aby nic nie pokazywać. Po utworzeniu pliku .exe umieść go w dowolnym folderze poleceń uruchamiania i nigdy go nie zobaczysz.

Paul Cheselske
źródło
1
Właściwie to dobre rozwiązanie.
Camilo Martin,
7
czy jest coś równoważnego lexpress.exe w nowszych wersjach systemu Windows, takich jak Windows 7?
Sнаđошƒаӽ
@ Sнаđошƒаӽ Jest w Windows 7 .... właśnie go przetestowałem
DarthRubik
@DarthRubik Dziękujemy za udostępnienie tego. Ja też to przetestowałem i działa dobrze. Czas głosować za odpowiedzią. :)
Sнаđошƒаӽ
Wydaje się, że to nie działa w systemie Windows 10 64, ponieważ „Command.com” przestało być obecne
Arne S
10

use Cmdow to narzędzie wiersza polecenia Win32 dla NT4 / 2000 / XP / 2003, które pozwala wyświetlać okna, przenosić, zmieniać ich rozmiary, zmieniać nazwy, ukrywać / ukrywać, wyłączać / włączać, minimalizować, maksymalizować, przywracać, aktywować / dezaktywować, zamykać, zabijać i więcej.

Uruchom ukryty plik wsadowy przekazując mu parametry: -

cmdow / run / hid mybat arg1 "arg 2"

Joe
źródło
Ale jak mam uruchomić to polecenie?
Moayad Mardini
9
cmdow jest wykrywany jako szkodliwe oprogramowanie przez większość produktów antywirusowych. Dlatego trudno byłoby korzystać z tego rozwiązania w miejscach innych niż własny komputer.
Ganesh R.
@Ganesh: Jakieś lepsze rozwiązanie?
Moayad Mardini
Czy to jest oprogramowanie typu open source? Nie ma sensu korzystać z aplikacji innych firm, która nie jest oprogramowaniem typu open source i mogłaby pakować trojany, gdy można to zrobić, uruchamiając 1 wierszowy vbscript Harrymca (patrz: odpowiedź na górze wątku).
thebunnyrules
1
Cóż, jest to oprogramowanie typu open source, więc jest to całkiem niesamowite. Można pobrać kod źródłowy tutaj: github.com/ritchielawrence/cmdow
thebunnyrules
9

Jeśli Twój plik wsadowy może zmieścić się w jednej linii i tak wielu znakach, po prostu użyj skrótu, klikając prawym przyciskiem myszy folder umieszczony w losowym katalogu i pomiń resztę kreatora, a na koniec kliknij prawym przyciskiem myszy właśnie utworzony skrót i kliknij właściwości i poniżej celu wprowadź to, co zwykle umieszczasz w pliku nietoperza. A Bobsleje twój wujek!

Plusy:

 No Command Window
 Ability to use an icon
 Same Functionality of bat file

Cons:

 Limited to one line, so many characters
Jack S.
źródło
Jedynym problemem jest to, że nie można skojarzyć typu pliku ze skrótem. Jeśli więc chcesz otworzyć skrypt wsadowy, klikając go dwukrotnie w Eksploratorze, nadal potrzebujesz pliku .bat.
Björn Lindqvist
Wciąż próbuję znaleźć wujka Boba, jest tu wszędzie!
Pimp Juice IT
7

Uruchom skrypt za pośrednictwem zadania, nie czyniąc go interaktywnym:

at 11:00 script.bat

Inne rozwiązanie, jeśli nie masz nic przeciwko instalowaniu czegoś takiego jak Python, możesz po prostu utworzyć skrypt i uruchomić go za pomocą pythonw(połączonej wersji dla operacji GUI). Ponieważ nie używasz żadnych graficznych interfejsów API, okno nie zostanie wyświetlone. Wystarczy użyć wywołań do, os.system()a naśladuje skrypt wsadowy, ponieważ jest to to samo, co wpisywanie ciągów w wierszu polecenia.

Przykład:

import os

os.system("tasklist > C:\tasks.txt")
os.system("ipconfig /all > C:\netinfo.log")
John T.
źródło
3
Ale jak mam uruchomić to polecenie?
Moayad Mardini
Musisz zaplanować zaplanowane zadanie lub napisać usługę.
Unfundednut
przykłady dodane.
John T
6

Można go łatwo zminimalizować.

start /MIN batch.cmd
Brad Gilbert
źródło
3
lub użyj zamiast tego / B!
rany
6

Korzystając z systemu Windows7, możesz użyć panelu sterowania „Zaplanowane zadanie”, aby zaplanować uruchamianie pliku wsadowego w sposób niewidoczny w tle z określonymi uprawnieniami, a nawet jako konto „SYSTEM”. Zobacz zrzut ekranu poniżej:

wprowadź opis zdjęcia tutaj

Ponadto, chociaż nie ma tak wielu możliwości, możesz również utworzyć niewidoczne zadanie skryptu wsadowego z wiersza poleceń, używając polecenia „AT.exe” bez opcji „/ interactive”.

djangofan
źródło
3
Ukryte pole wyboru po prostu ukrywa zadanie przed interfejsem użytkownika Harmonogramu zadań (
Sourav Ghosh,
Uruchamianie zadania jako „SYSTEM”, gdy nie potrzebuje on uprawnień „SYSTEM” (i nie zostało zbadane pod kątem słabości zabezpieczeń i nie zostało wzmocnione), jako zły pomysł; zobacz komentarze tutaj .
Scott
6

Nie lubię rozwiązania VBScript.

Pobierz i skopiuj nircmd.exe do swojego %systemroot%\system32folderu, a następnie dodaj to polecenie do pierwszego wiersza partii:

nircmd.exe win hide ititle "cmd.exe"

lub najpierw ustaw niestandardowy tytuł partii za pomocą titlepolecenia, aby uniknąć ukrywania wszystkich cmdokien, w ten sposób:

title MyBatch
nircmd.exe win hide ititle "MyBatch"
BijaN-R
źródło
Używam tej dokładnej metody, ale przez pewien czas nie udało mi się, aby nircmd nie ukrywało okna cmd, po prostu zminimalizowało go do paska zadań i nie można go przywrócić przez kliknięcie. Nie wiem dlaczego ...
James Yang,
3

Możesz także utworzyć skrypt AutoHotkey :

#NoTrayIcon ; To prevent momentary icon pop-up
run whatever.bat arg1 arg2,,hide 
endolit
źródło
3

JESZCZE INNY sposób, z C / C ++, polega na użyciu funkcji CreateProcess z flagą CREATE_NO_WINDOW. Ma dużo dodatkowej mocy, której tu nie pokazano. To tylko minimum potrzebne do zastąpienia rodziny system () lub _spawn ().

STARTUPINFO si;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);

PROCESS_INFORMATION pi;
ZeroMemory( &pi, sizeof(pi) );

// Spawn creates a cmd.exe window.  CreateProcess doesn't.
//if ( _spawnl( _P_WAIT, szFileNameBAT, szFileNameBAT, NULL ) ) {  
if ( !CreateProcess( szFileNameBAT, szFileNameBAT, NULL, NULL, false,
                     CREATE_NO_WINDOW, NULL, NULL, &si, &pi  ) ) {
  MyErrorFunc( "CreateProcess( \"%s\" ): %d", szFileNameBAT, GetLastError() );
  goto MyErrorHandling;
}

WaitForSingleObject( pi.hProcess, INFINITE );

CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
Frank szwajcarski
źródło
1
Prawidłowa odpowiedź dla podejścia WINAPI. Oto kod źródłowy i aplikacja jako dodatek do Twojej odpowiedzi.
Alex
3

Doskonały konwerter Bat To Exe konwertuje plik .batlub .cmdplik na .exeplik.

Ma prosty interfejs użytkownika. Możesz nie mieć okna konsoli, wybierając opcję „Niewidoczna aplikacja”. Pozwala także przypisać ikonę, spakować powiązane pliki i kilka innych opcji.

Oto zrzut ekranu głównego okna interfejsu:


Pamiętaj, że ten obraz jest nieaktualny. Pokazuje wersję 2.4.8, a od września 2018 r. Witryna oferuje wersję 3.0.10.0 (ostatnia aktualizacja 2018-03-23).

Ostrzeżenie: strona internetowa www.f2ko.de prowadzi do linku coinhive.com, który jest powszechnie określany jako złośliwe oprogramowanie .

BullyWiiPlaza
źródło
2

Zrobiłem to z nircmd w ten sposób:

  1. pobierz nircmd.exe z linku
  2. utwórz plik .bat
  3. pierwsza linia pliku .bat musi być następująca: nircmd.exe win hide ititle "cmd.exe"
  4. wybierz oba pliki i utwórz plik samorozpakowujący za pomocą programu Winrar
  5. w zakładce „ogólne” zaznacz pole „utwórz plik automatycznie wypakuj”
  6. w zakładce „z góry” wybierz przycisk „automatycznie wyciągaj”
  7. pojawi się nowe okno i wybierz zakładkę „tryb”, a następnie wybierz opcję: „ukryj wszystko”
  8. wybierz zakładkę „aktualizacja” i wybierz opcję „nadpisz istniejące pliki”
  9. Wybierz kartę „ogólne” i określ folder docelowy do wyodrębnienia, jeśli chcesz, aw polu „Wykreśl po wyodrębnieniu” wpisz pełną ścieżkę, do której zostanie rozpakowany plik .bat. Przykład: jeśli zdefiniujesz folder wyodrębniania jako: „c: \ windows \”, wówczas pełną ścieżką do wycinania po wyodrębnieniu będzie: „c: \ windows \ file.bat” (w przypadku, gdy twój .bat ma nazwę: file.bat )
  10. kliknij akceptuj we wszystkich oknach

Teraz będziesz mieć plik .exe, który po dwukrotnym kliknięciu i zainstalowaniu go, twój .bat będzie działał całkowicie ukryty.

ZEUS
źródło
1
cmdow /run /hid "file.extention" arg1 "arg 2"
malak
źródło
3
Proszę podać krótkie wyjaśnienie polecenia. To może pomóc OP (i innym) zrozumieć, jak to działa, zamiast kopiować polecenie i go używać.
BloodPhilia
'cmdow' is not recognized as an internal or external command, operable program or batch file.
Bacco,
1

Nie musisz robić żadnych specjalnych rzeczy.

Jeśli uruchamiasz pliki wsadowe z usługi Windows, powinny one być domyślnie ukryte, chyba że włączysz opcję „Zezwalaj usłudze na interakcję z komputerem”.

sgmoore
źródło
1

Dodanie tutaj mojej odpowiedzi z innego postu, ponieważ był to duplikat i nie widzę tutaj tego rozwiązania, więc teraz istnieje 17 różnych odpowiedzi na pytanie, jak uruchomić ukryty plik wsadowy. W najbliższym czasie usunę moją odpowiedź na ten post.

Utwórz skrypt wsadowy z logiką wsadową i zawartymi w nim poleceniami, a następnie utwórz nowy plik z .VBSrozszerzeniem, użyj poniższej logiki (przykład, który przedstawiłem poniżej) i po prostu podłącz pełną ścieżkę do pliku .CMDlub .BATpliku za pomocą PING -t <IPAddress>poleceń itp., Aby wykonuje partię w ukryty sposób, nie pokazując okna poleceń podczas jej wykonywania.

Tam, gdzie logika w poniższym przykładzie określa C:\Folder\BatchFileName.cmdzmianę polegającą na wskazaniu skryptu wsadowego za pomocą poleceń uruchamianych ręcznie itp. Teraz.

Zapisz .VBSplik i zaplanuj go z Task Scheduler Problemy z planowaniem zadania w systemie Windows7 do uruchomienia w nieokreślonym harmonogramie dla twoich potrzeb.

W przeciwnym razie kliknij dwukrotnie .VBSplik, aby uruchomić nieskończone PINGpolecenie umieszczone w pliku wsadowym, który wskażesz w razie potrzeby.

UWAGA: Wydaje mi się, że tutaj właśnie otrzymałem tę logikę skryptu, ale działa ona niezawodnie do tego samego celu, którego potrzebujesz tutaj, czyli do zapewnienia, że ​​okno poleceń jest ukryte, gdy plik wsadowy jest uruchamiany Źródło błędu serwera

PRZYKŁAD VBS SCRIPT RUN COMMAND LINE SERIA UKRYWANIE OKNA CMD

Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & "C:\Folder\BatchFileName.cmd" & Chr(34), 0
Set WinScriptHost = Nothing
Pimp Juice IT
źródło
1

Tutaj skompilowałem wszystkie sposoby, które znam, aby rozpocząć ukryty proces wsadowy bez zewnętrznych narzędzi. Z gotowymi do użycia skryptami (niektóre z nich dość bogate w opcje), a wszystkie z nich tworzą linię poleceń. Możliwe jest również Zwracany jest PID. Użyte narzędzia to IEXPRESS, SCHTASKS, WScript.Shell, Win32_Process i JScript.Net

npocmaka
źródło
1

Mimo że już odpowiedziałem na to, oto inne podejście. Różni się to tym, że skrypt wsadowy może sam się ukryć podczas uruchamiania. Potrzebne będą jednak dwa dodatkowe skrypty - windowMode.bat i getCMDPid.bat (oba zawierają .netkod). W jaki sposób można następnie użyć:

@echo off
call getCmdPid
call windowMode -pid %errorlevel% -mode hidden

echo this should be written into log despite the cmd window is hidden>log
echo ending the log>>log
exit
npocmaka
źródło
0

Miałem ten sam problem, ale zrozumiałem:
Shell("filehere" & "parametersforbatchfilehere", vbHidden)

Alan Panayotov
źródło
0

Zacząłem próbować to rozgryźć i tak naprawdę nigdy mi się nie udało. To było tak blisko, jak to możliwe:

@echo off
if not defined PIL (
    set PIL=1
    start /min "" %~0
    exit /b
)
TITLE Hello World
echo Hello world!
pause>nul
djangofan
źródło
0

Musiałem ukryć okno dla pliku wsadowego wywoływanego z menu kontekstowego eksploratora, a także potrzebowałem dodać cudzysłowy do parametru. Żadna z odpowiedzi nie zadziałała dla mnie, więc dodaję własne rozwiązanie.

Miałem to w „poleceniu” rejestru dla menu kontekstowego eksploratora:

cmd /c C:\mypath\myprogram.bat "%1"

Aby go wymienić, musiałem utworzyć VBS w następujący sposób:

WScript.CreateObject ("WScript.shell").run "cmd /c C:\mypath\myprogram.bat """ & WScript.Arguments(0) & """", 0, False

Zapisz w takim miejscu C:\mypath\myscript.vbsi nazwij to w rejestrze:

wscript "C:\mypath\myscript.vbs" "%1"

Zauważ, że ścieżka .bat nie może zawierać spacji, więc zastąp ją nazwą pliku 8.3. Na przykład C:\Program Files\myprogram.batnależy określić jako C:\Progra~1\myprogram.bat. Aby zobaczyć użycie nazwy pliku 8.3dir /x

bortao
źródło
0

Zostałem utworzony RunApp, aby wykonać takie zadanie, a także używać go w środowisku produkcyjnym, mam nadzieję, że to pomoże.

Konfiguracja jak poniżej:

plik: config.arg

:style:hidden

MyBatchFile.bat
arg1
arg2

I runapp.exezamiast tego uruchom .

James Yang
źródło
-1

Działa to w systemie Windows 8 (ewentualnie innych)

  1. Utwórz plik wsadowy jak zwykle
  2. Utwórz skrót do pliku wsadowego
  3. Kliknij prawym przyciskiem myszy skrót> właściwości
  4. Kliknij opcję Układ
  5. Odznacz „Niech okno pozycji systemu”
  6. ustaw lewą pozycję tp -1000
  7. kliknij Zastosuj

  8. Kliknij skrót, a uruchomi się, ale go nie zobaczysz :)

Andrzej
źródło
4
Naprawdę? To nie pojawi się jako przycisk na pasku zadań?
Scott