Czy istnieje exe systemu Windows, który nic nie robi?

47

Czy gdzieś w ramach instalacji systemu Windows istnieje exe w stylu „noop”? Przygotowuję niektóre zadania wsadowe i zaplanowane i z kilku powodów chciałbym odwołać się do pliku wykonywalnego, który nic nie robi - tj. Uruchamia się bez widocznego okna i natychmiast kończy działanie.

Czy taki plik wykonywalny istnieje w zwykłej instalacji systemu Windows w dowolnym miejscu? lub jak mogę się zbliżyć? Nie chcę polegać na niczym, co nie jest jeszcze zawarte w systemie Windows.

DuckMaestro
źródło
2
Z obserwacji: svchost.exeniczego nie otwiera.
ta.speot.is
@ todda.speot.is należy dołączyć to jako pełną odpowiedź.
DuckMaestro
2
Czy musiał to być plik zewnętrzny (wykonywalny)? Jeśli nie, to rempolecenie mogło zadziałać (i zależnie od tego, gdzie w pliku wsadowym jest używany, być może nawet ::wariant).
Synetech

Odpowiedzi:

51

Możesz użyć rundll32:

  • Brak okna konsoli
  • Bez skutków ubocznych
  • Tylko 44 KB
  • Nie wymaga żadnych argumentów
  • Działa na każdej najnowszej wersji systemu Windows (XP, Vista, 7) i prawdopodobnie na każdym systemie opartym na NT.
Andrea
źródło
2
Dlaczego to tam jest?
Nathan
6
@Nathan Za pomocą odpowiednich argumentów może wywoływać funkcję w bibliotece DLL
Andrea
Dobrze. Na przykład wyobraź sobie prosty print.exeprogram, który po prostu drukuje parametry, które są przekazywane. Bez żadnych argumentów, by to zrobić nic , ale dając mu argumenty robi coś : > print foobar.
Synetech
@Andrea nie robi nic, chyba że nie otrzyma żadnych argumentów. Chociaż to jest wystarczająco nic, zgodnie z jego wymaganiami.
barlop
3
Tyle że prawdopodobnie nie jest to żadna operacja.
Andy Terra,
36

Czy gdzieś w ramach instalacji systemu Windows istnieje exe w stylu „noop”?

Czyli konkretnie program, który ma nic nie robić i nic więcej? Tak i nie. Nie, w systemie Windows domyślnie nie ma takiego, ale obejmuje on możliwość samodzielnego wykonania.


opcja 1

Uruchom notepad.exe , wpisz następujące wiersze i zapisz je jako C:\ret.scr(nie zapomnij pustego wiersza):

a
ret

rcx
1
n ret.com
w
q

Skompiluj go za pomocą debug.exe w wierszu polecenia ( cmd.exe ) za pomocą następującego polecenia:

C:\> debug < ret.scr

Masz teraz program ret.com(w C: \), który może być używany w plikach wsadowych, który absolutnie nic nie robi (cóż, poza wyjściem, jeśli to się liczy).

Uwaga : debugnie jest dostępny w systemach 64-bitowych.


Opcja 2

W systemie Vista i nowszych framework .NET jest domyślnie dołączony, więc możesz również stworzyć natywny system Windows, który nic nie robi .exez C # ( 64-bit kompatybilny ):

Uruchom notepad.exe i wpisz następujące wiersze, zapisując go jako C:\ret.cs:

class rte
{
   static void Main() {
   }
}

Skompiluj go za pomocą csc.exe w wierszu polecenia ( cmd.exe ) za pomocą następującego polecenia:

C:\> csc ret.cs

Masz teraz inny program ret.exe(w C: \), którego można używać w plikach wsadowych, który nie zwraca nic.

Synetech
źródło
2
Cholera genialna ... wszyscy powinni cię głosować za tym .. Zawsze chciałem nauczyć się języka asemblera .. Nigdy nie używałem debugowania i myślałem, że to umarło z DOS. Cieszę się, że natknąłem się tutaj na twoją odpowiedź. może pasza na przyszłe hobby!
barlop
12
Dla mnie csc.exenie było na mojej drodze, ale było zlokalizowane naC:\Windows\Microsoft.NET\Framework\v3.5\csc.exe
AlcubierreDrive
co z EXE, który jest skompilowany z programu C, który ma tylko główną metodę, taką jak csc.exe Czy to robi znacznie więcej niż program napisany podczas debugowania? na przykład, czy w tym programie jest o wiele więcej języka asemblera?
barlop
1
@barlop, generalnie tak. Chociaż pusta mainfunkcja wydaje się, jakby była, a przynajmniej powinna być niczym więcej niż ret, jeśli otworzysz taki program w dezasemblatorze (lub nawet edytorze szesnastkowym), zobaczysz, że jest to o wiele, wiele więcej. Zwykle konfiguruje wszelkiego rodzaju segmenty (kod, dane itp.), Przygotowuje stosy i sterty, nie wspominając o importowaniu wszelkiego rodzaju funkcji i łańcuchów, a nawet jeśli nigdy tak naprawdę ich nie używa.
Synetech
Potrzebowałem tego, aby zastąpić niektóre stare zewnętrzne oprogramowanie pomocnicze dla zestawu instalacyjnego, zmniejszając rozmiar pakietu, w którym to oprogramowanie nie jest już potrzebne, takie jak DirectX i VCruntimes. Ponadto, jeśli nie masz lub nie chcesz instalować żadnego kompilatora, użyj kompilatorów online z tutorialspoint.com/codingground.htm , po kompilacji pobierz projekt, a będzie on miał exe w archiwum.
JasonXA
10

Nie ma żadnych programów dołączonych do systemu Windows (o których wiem), które natychmiast wychodzą po uruchomieniu (przynajmniej celowo).

W systemie Windows Vista i nowszym istnieje jednak narzędzie timeout.exe . Timeout.exepoczeka określoną liczbę sekund, a następnie wyjdzie. Na przykład:

C:\>timeout /t 0 > nul:

Ustawienie timeout.exeoczekiwania na 0 sekund jest prawie tak blisko, jak dojdzie do EXE, który natychmiast kończy działanie.

Andrew Lambert
źródło
3
Aby zrobić to, czego chce Op, użyj limitu czasu, takiego jak „timeout / t 0> nul:” - który uruchomi polecenie limitu czasu bez żadnych danych wyjściowych i natychmiast zakończy działanie.
misterjaytee
@misterjaytee dobry pomysł.
Andrew Lambert
@Tom: Okno konsoli . Nie otworzy wiersza polecenia, chyba że uruchomisz cmd.exekonkretnie.
grawity
@grawity: Harmonogram zadań wymaga procesora poleceń do uruchomienia polecenia, dlatego okno konsoli wyświetli się na krótko.
Tamara Wijsman,
@TomWijsman Spróbuj, jak mogę, ale nie mogę otworzyć żadnego nowego okna.
Andrew Lambert
4

Bez parametrów „C: \ Windows \ hh.exe” (plik wykonywalny pomocy Microsoft® HTML) nic nie robi i, jak sądzę, jest zawarty w dowolnej wersji Windows.

ProCompSys
źródło
2

wscript bez argumentów w ogóle nie uruchamia skryptu i jest wykonywalnym „GUI” (nie otwiera konsoli).

grawitacja
źródło
2
Kiedy uruchamiam wscript bez argumentów, pojawia się „Ustawienia hosta skryptów Windows”, które się pojawiają. Windows 7 64-bitowy wscript /bWydaje się, że bieganie działa.
DuckMaestro
2

Próbowałem rndll32.exea hh.exejednak oboje wtedy nie zmieniało% ERRORLEVEL%. Jest to zmienna środowiskowa, która informuje, czy ostatni plik wykonywalny się powiódł. Działa jak kod powrotu unixa.

Moje poniższe polecenie noop spowoduje ustawienie% ERRORLEVEL% na zero:

cd %CD%

Po prostu zmieniam katalog roboczy na bieżący.

Neves
źródło
0

polecenie echo offnic nie robi w pliku wsadowym (.BAT). Chociaż nie jest to plik wykonywalny, jest to wewnętrzne polecenie systemu Windows.

obaqueiro
źródło
7
Właściwie to ma coś zrobić, okazuje echo off. To może wydawać się niczym, jeśli masz włączone, ale jeśli chcesz echa, to na pewno coś robi.
Synetech
6
i podobnie jak rem, to nie jest Windows
ex
0

Skompiluj prosty program C ++ „Hello World”, aby utworzyć prosty plik exe, który natychmiast się zakończy.
Zapisz następujący kod w pliku tekstowym o nazwie takiej jak a.cpp:

#include<iostream>
int main()
{ std::cout<<"Hello World";
return 0;
}

Następnie skompiluj go za pomocą kompilatora NAJNOWSZY C ++, takiego jak MinGW dla Windows 7.
W przypadku MinGW, wykonaj następujące polecenie w PowerShell lub wierszu polecenia: g++ path\a.cpp(Zakładając, że ustawiłeś zmienną środowiskową PATH w lokalizacji binarnej g ++ lub w katalogu binarnym g ++, tj. C : \ mingw \ bin domyślnie). Po wykonaniu polecenia otrzymasz a.exe, który wyświetli Hello World i zakończy działanie. Zweryfikuj, klikając dwukrotnie ... okno cmd pojawi się i zniknie natychmiast. Dostęp do wiersza poleceń spowoduje wyświetlenie Hello World i powrót do wiersza polecenia CLI.
Następnie możesz przenieść ten plik a.exe w systemie 32 lub w dowolnym miejscu głęboko w systemie Windows. Możesz nawet wdrożyć go na dysku instalacyjnym systemu Windows.

Apple II
źródło
2
Jestem prawie pewien, że kompilator C ++ nie jest dołączony do systemu Windows.
Synetech
6
Drukowanie „Hello World” prawie nic nie robi.
Keith Thompson
Kompilacja @Synetech jest wymagana tylko raz, dopóki architektura procesora jest taka sama.
Apple II
1
@KeithThompson Nie sądzę, by to zakłócało algorytm BAT, ale jeśli to naprawdę ma znaczenie, zastąp Hello World znakiem ASCII null ..
Apple II
5
> Nie sądzę, by to zakłócało algorytm BAT, ale jeśli to naprawdę ma znaczenie, zastąp Hello Hello znakiem ASCII null lub po prostu usuń polecenie drukowania.
Synetech
0

Możesz napisać no-op w C tak

void main() {

}

i skompiluj go do pliku .exe. Na przykład, jeśli masz zainstalowany program Visual Studio, możesz otworzyć notatnik, wkleić ten fragment kodu, zapisać go jako noop.c, a następnie użyć wiersza polecenia cl noop.c, aby wyświetlić noop.exeplik w tym samym folderze.

Być może najpierw musisz przejść do Microsoft Visual Studio X.0folderu Program Filesi uruchomić vcvarsall.batz wiersza polecenia.

Andy Terra
źródło
Pominąłeś tę część pytania, która brzmiała „część instalacji systemu Windows”. Również średnik jest zbędny.
Synetech,
-1

Chociaż nie jest to głównym celem tego narzędzia, możesz użyć opcji / donothing programu WuInstall - możesz także określić kod powrotu, który powinien zostać zwrócony - patrz http://help.wuinstall.com

HSN
źródło
Wydaje się, że nie jest to dołączone do XP lub 7. Czy jest dołączone do wersji Server?
Synetech