Polecenie START
Opisujac od czasu do czasu rózne wbudowane w system Windows polecenia, kiedys musialem dojsc do polecenia START. Polecenie start (wydawane wylacznie z konsoli cmd.exe) jest dosc ciekawym przypadkiem, poniewaz jest commandline’owa metoda zrobienia z linii polecen tego, co uzytkownik bez problemu robi myszka, a programisci - z wnetrza swojego kodu. Przykladowo, dwukrotne klikniecie na pliku costam.txt otworzy plik. A z wiersza linii polecen? notepad.exe costam.txt Wszystko jest proste, dopóki nie okaze sie, ze uzytkownik zmienil sobie aplikacje, której uzywa do otwierania plików tekstowych. Niby notepad powinien w systemie nadal istniec, ale... Dlatego wlasnie, mamy do dyspozycji start costam.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 dokladniej – program ocsetup.exe Program ten sluzy do instalacji ról i funkcjonalnosci i charakteryzuje sie jedna niemila cecha: uruchomiony z linii polecen (bo jak inaczej w wersji CORE) nie wyswietla zadnych informacji i natychmiast "oddaje" linie polecen administratorowi. Zaczyna sobie dzialac i w wiekszosci przypadków wykonuje swoje zadanie naprawde dlugo. Jak poznac kiedy skonczyl? Mozna kukac do task managera, ale to malo wiarygodna metoda. Najlepiej uruchomic go w taki sposób, zeby "pokazal", ze skonczyl swoja prace. Wykorzystac do tego mozna polecenie start /w ocsetup.exe nazwa-instalowanej-roli i wszystko bedzie jasne. W serwerze CORE, start cmd.exe przyda sie równiez do sklonowania konsoli, co bywa uzyteczne.
Co jeszcze warto wiedziec o tym poleceniu? Oto garsc umiarkowanie uzytecznych, za to ciekawych informacji:
- Jezeli przez start uruchamiamy polecenie lub skrypt commandline – otworzy sie w nowym oknie. Oknu takiemu mozna nadac tytul. Jezeli tytul bedzie równy "Program Manager" – Task Manager nie pokaze takiego okna na swoich listach. Na przyklad: start "Program Manager" cmd.exe
- Parametr /b pozwala na uruchomienie polecenia w tym samym oknie. Zachowanie polecenia odbiega nieco od oczekiwan i czasami wydaje sie niedopracowane. Na przyklad poprzez wydanie z konsoli uruchomionej na prawach administratora polecenia start /b cmd.exe, exit i nacisniecie enter – sprawia sie, ze z tytulu okna znika opis "Administrator" podczas gdy prawa pozostaja podniesione. Co istotne, nawet z parametrem /b, poleceniem start nie mozna zmienic tytulu biezacego okna. Robi sie to poleceniem title.
- Uzycie polecenia cmd oznacza, ze zamiast niego zostanie uzyta aktualna wartosc zmiennej %COMSPEC%. Utrudnia to ataki przez podrzucenie podmienionego cmd.exe do biezacego folderu, ale warto wiedziec, ze równoczesnie znaczy to, ze zamiast cmd moze sie uruchomic cos zupelnie innego.
- Wewnetrzne polecenia cmd.exe (takie jak dir, cd czy del) zawsze uruchamiane sa przez program wskazany w zmiennej %COMSPEC%, do którego dodany zostaje parametr /K
- W poleceniu start okreslic mozna priorytet tworzonego procesu. Teoretycznie mozna wybrac tylko jedna opcje z zestawu LOW, NORMAL, HIGH, REALTIME, ABOVENORMAL, BELOWNORMAL, ale w praktyce mozna uzyc nawet wszystkich równoczesnie. Programisci latwo pojma dlaczego... Jako samodzielne cwiczenie pozostawiam eksperymenty okreslajace faktyczny priorytet w takim przypadku.
- Parametrem AFFINITY i liczba szesnastkowa mozna okreslic maske definiujaca, na których procesorach wykona sie wskazane polecenie. Oczywiscie maska równa 0 nie jest dopuszczalna i spowoduje wyswietlenie komunikatu o bledzie. Pozostale wartosci ustawia maske, ale jezeli nie sa wlasciwe (na przyklad chcemy uruchomic skrypt na procesorze numer 8 podczas gdy mamy w systemie tylko jeden) – polecenie start nie zmieni maski domyslnej i w zaden sposób o tym nie powiadomi.
- Podajac jako parametr sciezke do folderu otworzymy okno explorera ze wskazanym folderem.
Uzyteczne? Moze na co dzien niespecjalnie, ale z drugiej strony lepiej wiedziec niz szukac kiedys metoda prób i bledów.
Autor: Grzegorz Tworek [MVP]
Comments
Anonymous
January 01, 2003
Podawane w poleceniu priorytety są tak naprawdę bitami do przekazania w parametrze dwCreationFlags funkcji CreateProcess. Teoretycznie można ustawić kilka z nich równocześnie. Poszukaj w MSDN opisu dla GetPriorityClass.Anonymous
September 17, 2009
mozesz wytlumaczyc cos o tych priorytetach?