taskmgr.exe wywołany z argumentem przez Windows 7

13

Zauważyłem, kiedy naciskam Ctrl+ Alt+ Deli klikam Menedżer zadań, Windows wywołuje taskmgr.exe /3jako polecenie. Niektóre witryny twierdzą, że Menedżer zadań nie ma argumentów wiersza poleceń.

Menedżer zadań Przetwarza w Eksploratorze procesów

Dlaczego system Windows dołącza ten argument?

Martin Braun
źródło
Ponadto, istnieje inna, mniejsza waga LaunchTM.exew %windir%\System32co czyni go jeszcze bardziej mylące, ponieważ nie mogłem zorientować się, w oparciu o moje google, jak również, jego celem istnienia i to, co jest dobre w ogóle.
@ Chinggis6 Nie ma LaunchTM.exeWindows 7, myślę, że jesteś na Windows 8. Dlaczego nie utworzyć nowego pytania na ten temat tutaj w superużytkowniku? ;)
Martin Braun

Odpowiedzi:

13

Analiza

Najwyraźniej nie jest to udokumentowane zachowanie. Zrobiłem kilka testów i zanotowałem swoje wyniki:

  • Kliknij pasek zadań prawym przyciskiem myszy, a następnie kliknij polecenie Uruchom Menedżera zadań .

    "C:\Windows\system32\taskmgr.exe" /4
    
  • Naciśnij Ctrl+ Shift+ Esc.

    taskmgr.exe /2
    
  • Naciśnij Ctrl+ Alt+ Deli kliknij Uruchom Menedżera zadań .

    taskmgr.exe /3
    
  • Uruchom Menedżera zadań bez uprawnień i kliknij przycisk Pokaż procesy od wszystkich użytkowników .

    "C:\Windows\system32\taskmgr.exe" /1
    
  • Wpisz lub wklej taskmgr.exew pasku wyszukiwania menu Start i naciśnij Enter; naciśnij Win+ R, wpisz lub wklej taskmgr.exew polu tekstowym i naciśnij Enter; przejdź do System32folderu i kliknij dwukrotnie taskmgr.exeplik wykonywalny; uruchom narzędzie konfiguracji systemu ( msconfig.exe), kliknij kartę Narzędzia , wybierz pozycję Menedżer zadań z listy i kliknij Uruchom .

    "C:\Windows\system32\taskmgr.exe"
    
  • Otwórz wiersz polecenia, wpisz lub wklej taskmgr.exei naciśnij Enter.

    taskmgr.exe
    

Uwagi

  • Podobnie działało to w fazie rozwoju systemu Windows 8, aż do wersji zapoznawczej. Nie ma to wpływu na Windows Vista i wcześniejsze systemy operacyjne.

  • Plik wykonywalny importuje kilka funkcji API (mianowicie GetCommandLineWi CommandLineToArgvW), które są używane do pobierania i analizowania argumentów wiersza poleceń.

  • Ręczne uruchomienie programu przy użyciu dowolnego z powyższych argumentów nie wydaje się mieć zauważalnego wpływu.

Gdybym musiał zgadywać, to powiedziałbym, że parametr numeryczny miał być wewnętrznym wskaźnikiem uruchamiania, prawdopodobnie używanym do celów debugowania, a następnie pozostawionym w tyle.

i31415
źródło
5
"taskmgr / 7 / startup" => zacznij od zakładki Uruchamianie z przodu! (Windows 8.1) - ale nie robi tego ani „taskmgr / startup / 7”, ani „taskmgr / startup”! (Dodatkowy kredyt: Proszę wyjaśnić algorytm analizy wiersza polecenia taskmgr.exe, biorąc pod uwagę te dowody ...)
davidbak
1
@davidbak taskmgr /anything /startupdziała, tak /startupjak drugi argument.
Michel de Ruiter
@MicheldeRuiter - Tak. Czy zabiłoby ich to, aby dopuszczać argumenty w dowolnej kolejności? Czy spowodowałeś dodatkową pracę w QA? Opóźniłeś datę wysyłki? HUH ????
davidbak
2

Kilka uwag:

To, że polecenie zostało wysłane, nie oznacza, że ​​program akceptuje te argumenty lub jakiekolwiek inne.

Na przykład:

Zadzwoniłem do menedżera zadań z moim dziwnym poleceniem, a zachowanie się nie zmieniło:

wprowadź opis zdjęcia tutaj

Z punktu widzenia podstawowego programowania każda aplikacja będzie miała jakąś główną metodę, w której można przekazywać argumenty . Na przykład podstawowa aplikacja Windows Form C # wygląda mniej więcej tak:

private void Form1_Load(object sender, EventArgs e)
        {

        }

Jeśli przekażę jakieś śmieszne argumenty, aplikacja nic się nie dzieje, ale Process Explorer je złapie i wyświetli.

wprowadź opis zdjęcia tutaj

Jeśli jednak wyraźnie zdecyduję się je obsłużyć, uzyskasz interakcję z polecenia.

wprowadź opis zdjęcia tutaj

I wszystko, co musiałem zrobić, to nieznacznie zmienić punkt wejścia formularza:

private void Form1_Load(object sender, EventArgs e)
        {
            string arguments = Environment.GetCommandLineArgs()[1];

            this.Text = arguments;
        }

Wróćmy teraz do pytania, dlaczego tak jest:

Jeśli uzyskujesz dostęp do taskmgr.exe z metody ctrl+ alt+ del, rzeczywiście widzisz argument polecenia „/ 3”. Również jeśli użyjesz ctrl+ shift+, escto przejdzie / 2 i jeśli klikniesz prawym przyciskiem myszy pasek zadań i klikniesz „Uruchom Menedżera zadań”, pokazany przełącznik to / 4.

Wszystko to prowadzi mnie do wniosku, że być może Windows musi coś wiedzieć, a może został już prawie zaimplementowany w Menedżerze zadań, o którym nie wiemy. Na przykład zabezpieczenia w systemie Windows mogą chcieć wiedzieć, czy do wywołania taskmgr.exe użyto ctrl+ alt+, dela nie skrypt lub użytkownik. Ponownie, czysta spekulacja, ale takie wątki sprawiają, że myślę, że mogła to być przynajmniej myśl.


Dla niesławnego tl; dr

Aby wiedzieć, dlaczego system Windows przekazuje te polecenia, prawdopodobnie potrzebujemy członka zespołu programistów Microsoft lub kodu źródłowego. Nie może być lepszej odpowiedzi.

Austin T French
źródło