Polecenie START

Polecenie START

  • Comments 2
  • Likes

Opisując od czasu do czasu różne wbudowane w system Windows polecenia, kiedyś musiałem dojść do polecenia START. Polecenie start (wydawane wyłącznie z konsoli cmd.exe) jest dość ciekawym przypadkiem, ponieważ jest commandline’ową metodą zrobienia z linii poleceń tego, co użytkownik bez problemu robi myszką, a programiści - z wnętrza swojego kodu. Przykładowo, dwukrotne kliknięcie na pliku cośtam.txt otworzy plik. A z wiersza linii poleceń? notepad.exe cośtam.txt Wszystko jest proste, dopóki nie okaże się, że użytkownik zmienił sobie aplikację, której używa do otwierania plików tekstowych. Niby notepad powinien w systemie nadal istnieć, ale... Dlatego właśnie, mamy do dyspozycji start cośtam.txt, które otworzy na pewno to, co trzeba.

Innym przypadkiem, w którym administrator przypomina sobie o poleceniu start jest Windows Server 2008 CORE, a dokładniej – program ocsetup.exe Program ten służy do instalacji ról i funkcjonalności i charakteryzuje się jedną niemiłą cechą: uruchomiony z linii poleceń (bo jak inaczej w wersji CORE) nie wyświetla żadnych informacji i natychmiast "oddaje" linię poleceń administratorowi. Zaczyna sobie działać i w większości przypadków wykonuje swoje zadanie naprawdę długo. Jak poznać kiedy skończył? Można kukać do task managera, ale to mało wiarygodna metoda. Najlepiej uruchomić go w taki sposób, żeby "pokazał", że skończył swoją pracę. Wykorzystać do tego można polecenie start /w ocsetup.exe nazwa-instalowanej-roli i wszystko będzie jasne. W serwerze CORE, start cmd.exe przyda się również do sklonowania konsoli, co bywa użyteczne.

Co jeszcze warto wiedzieć o tym poleceniu? Oto garść umiarkowanie użytecznych, za to ciekawych informacji:

  • Jeżeli przez start uruchamiamy polecenie lub skrypt commandline – otworzy się w nowym oknie. Oknu takiemu można nadać tytuł. Jeżeli tytuł będzie równy "Program Manager" – Task Manager nie pokaże takiego okna na swoich listach. Na przykład: start "Program Manager" cmd.exe
  • Parametr /b pozwala na uruchomienie polecenia w tym samym oknie. Zachowanie polecenia odbiega nieco od oczekiwań i czasami wydaje się niedopracowane. Na przykład poprzez wydanie z konsoli uruchomionej na prawach administratora polecenia start /b cmd.exe, exit i naciśnięcie enter – sprawia się, że z tytułu okna znika opis "Administrator" podczas gdy prawa pozostają podniesione. Co istotne, nawet z parametrem /b, poleceniem start nie można zmienić tytułu bieżącego okna. Robi się to poleceniem title.
  • Użycie polecenia cmd oznacza, że zamiast niego zostanie użyta aktualna wartość zmiennej %COMSPEC%. Utrudnia to ataki przez podrzucenie podmienionego cmd.exe do bieżącego folderu, ale warto wiedzieć, że równocześnie znaczy to, że zamiast cmd może się uruchomić coś zupełnie innego.
  • Wewnętrzne polecenia cmd.exe (takie jak dir, cd czy del) zawsze uruchamiane są przez program wskazany w zmiennej %COMSPEC%, do którego dodany zostaje parametr /K
  • W poleceniu start określić można priorytet tworzonego procesu. Teoretycznie można wybrać tylko jedną opcję z zestawu LOW, NORMAL, HIGH, REALTIME, ABOVENORMAL, BELOWNORMAL, ale w praktyce można użyć nawet wszystkich równocześnie. Programiści łatwo pojmą dlaczego... Jako samodzielne ćwiczenie pozostawiam eksperymenty określające faktyczny priorytet w takim przypadku.
  • Parametrem AFFINITY i liczbą szesnastkową można określić maskę definiującą, na których procesorach wykona się wskazane polecenie. Oczywiście maska równa 0 nie jest dopuszczalna i spowoduje wyświetlenie komunikatu o błędzie. Pozostałe wartości ustawią maskę, ale jeżeli nie są właściwe (na przykład chcemy uruchomić skrypt na procesorze numer 8 podczas gdy mamy w systemie tylko jeden) – polecenie start nie zmieni maski domyślnej i w żaden sposób o tym nie powiadomi.
  • Podając jako parametr ścieżkę do folderu otworzymy okno explorera ze wskazanym folderem.

Użyteczne? Może na co dzień niespecjalnie, ale z drugiej strony lepiej wiedzieć niż szukać kiedyś metodą prób i błędów.

Autor: Grzegorz Tworek [MVP]

Comments
  • <p>mozesz wytlumaczyc cos o tych priorytetach?</p>

  • <p>Podawane w poleceniu priorytety są tak naprawdę bitami do przekazania w parametrze dwCreationFlags funkcji CreateProcess. Teoretycznie można ustawić kilka z nich r&#243;wnocześnie.</p> <p>Poszukaj w MSDN opisu dla GetPriorityClass.</p>

Your comment has been posted.   Close
Thank you, your comment requires moderation so it may take a while to appear.   Close
Leave a Comment