Sesja interaktywna 0 w systemie Windows 7

14

Próbuję uruchomić program cmd.exe w sesji 0. Dotychczas wykonałem następujące czynności z wiersza polecenia z podwyższonym poziomem uprawnień:

sc config UI0Detect start= auto
net start UI0Detect

Odpowiedź wskazuje, że usługa została uruchomiona poprawnie. W tym momencie założyłem, że jeśli przestawię się na sesję 0, uruchomi się cmd.exe.

Przełączam się do sesji 0 za pomocą następującego polecenia:

rundll32 winsta.dll,WinStationSwitchToServicesSession

To z powodzeniem przełącza mnie do sesji 0, ale jedynym dostępnym oknem jest to, które ma opcję powrotu do sesji 1.

Jak uzyskać cmd.exe do uruchomienia w sesji 0?

omghai2u
źródło
Dlaczego chcesz to zrobić? UI0Detect pozwala starym serwisom wyświetlać okno komunikatu, nie uruchamiając nowych aplikacji GUI. cmd.exe ma GUI
Peter Hahndorf
6
@PeterHahndorf Rozumiem, że fajnie jest odmawiać odpowiedzi na pytania, mówiąc: „cofnijmy się o krok i zobaczmy, czy to jest to, co naprawdę musimy zrobić, ponieważ brzmi to jak zły pomysł”, i jest to stosunkowo dobry sposób na protekcjonalność innych programistów. Ale ponieważ jest to scenariusz debugowania i ma być szybką poprawką (i alternatywą do korzystania z aplikacji innej firmy, takich jak AlwaysUp), tak naprawdę nie widzę, jak pytanie „dlaczego” jest pomocną odpowiedzią. W każdym razie dzięki.
omghai2u
Myślę, że Peter ma rację. Pytanie, które powinieneś napisać, brzmi: „To właśnie próbuję zrobić”. Szybka poprawka będzie dotyczyła tylko przyszłego bólu. Nie mogę zliczyć, ile razy słyszałem „szybką poprawkę”, aby zobaczyć „szybką poprawkę” w produkcji trzy lata później. . . potrzebuję kolejnej „szybkiej poprawki”. Zakładam, że piszesz, aby uruchomić jakiś skrypt wsadowy?
surfasb
1
@surfasb Pytanie, które zasugerowałeś jest zasadniczo pytaniem, które napisałem: „Próbuję uruchomić program cmd.exe w sesji 0.” Proszę, skoncentruj się na odpowiedziach na to pytanie. Dzięki. I nie ma szans, że trafi to do produkcji lub nie będzie wiązało się z przyszłym bólem. Sposób, w jaki to robię dla produkcji, jest już ustawiony, ale nie mogę go używać do debugowania. Sposób, w jaki obecnie to robię w celu debugowania, jest uciążliwy i wymaga użycia aplikacji innej firmy.
omghai2u

Odpowiedzi:

19

Aby uruchomić cmd.exe w sesji 0, użyj psexec z Sysinternals

psexec.exe -s 0 cmd.exe

Teraz masz konsolę uruchomioną w sesji 0,

możesz także uruchomić cmd.exe w sesji 0 i wyświetlić GUI:

psexec.exe -s -i 0 cmd.exe

w ten sposób, kiedy przejdziesz do sesji 0, cmd.exe będzie tam na ciebie czekał.

masz tyle praw, ile możesz uzyskać w systemie Windows 7:

whoami /all

jeśli używasz innych PsTools, pamiętaj, aby użyć przełącznika / accepteula:

pslist /accepteula

w przeciwnym razie program wyświetli okno komunikatu z prośbą o zaakceptowanie Eula, program zawiesi się, ponieważ w sesji 0 nie ma interfejsu użytkownika do zamknięcia okna komunikatu.

Aby sprawdzić, czy działasz w sesji 0, możesz użyć qprocess:

qprocess /ID:0

zobaczysz „cmd.exe” wśród wszystkich procesów serwisowych.

Peter Hahndorf
źródło
Niesamowite dzięki za próbę odpowiedzi na moje pytanie. To z pewnością zadziałałoby, moim konkretnym zamiarem (jak wskazano w komentarzach), jednak było to unikanie korzystania z aplikacji innych firm. Czy istnieje dobry sposób na zrobienie tego, który nie wymaga użycia narzędzi SysInternals (lub tak naprawdę niczego, co nie jest dostępne w systemie Windows)? Dzięki jeszcze raz.
omghai2u
2
Nie uważam narzędzi Sysinternal za „zewnętrzne”, że pochodzą od firmy Microsoft i nie trzeba ich instalować.
Peter Hahndorf
Przepraszamy, zastanawiałem się nad czymś, co nie jest domyślnie instalowane jako „firma zewnętrzna”.
omghai2u
Piotr. Wspaniale! Dziękuję. Działa idealnie do uruchamiania procesu w sesji 0 (co oznacza, że ​​działa nadal po wylogowaniu).
Daniel James Bryars
5
Pierwszy wiersz polecenia jest niepoprawny: -sdziała jako SYSTEMużytkownik i nie przyjmuje argumentu. Może miałeś na myśli -i 0w pierwszym i -s -i 0drugim przykładzie?
jwg
1

To nie zadziała. Po prostu rozpoczyna proces jako System.

Usługi to programy napisane w specjalny sposób do przyjmowania poleceń od kierownika kontroli usług.

MS posiada narzędzie, które pozwala na uruchomienie programu jako usługi. Nazywa się Srvanyi znajduje się w Narzędziach Windows 2003 Resource Kit.

Pobierz Narzędzia zestawu Windows Server 2003 Resource Kit

David
źródło
0

Pewnego dnia odkryłem rozwiązanie przez przypadek, ale http://www.alex-ionescu.com/?p=59 dokumentuje również rozwiązanie zbliżone do tego, co znalazłem

Utwórz plik wsadowy z następującymi (nazwij go some.bat)

start cmd

Następnie utwórz usługę, aby wywołać ten plik wsadowy (za pomocą wiersza polecenia administratora)

sc create access0 type= interact type= own binpath= some.bat

(Zwróć uwagę na spację po każdym =, i sugeruję użycie pełnej ścieżki dla some.bat)

To jest kwestia uruchomienia usług

sc start ui0detect
sc start access0

(Nie ma potrzeby dokonywania automatycznego uruchamiania ui0detect za pomocą sc config UI0Detect start = auto)

A jeśli wszystko pójdzie dobrze, dostaniesz migające pudełko z nadchodzącymi wiadomościami! Przejdź do Wyświetl wiadomości, a będziesz mieć Admininstrator (nt organ \ system) Wiersz polecenia, który nie zostanie automatycznie zniszczony przez nieudane uruchomienie usługi (stąd potrzeba pliku wsadowego z poleceniem start)

To działa, chociaż czasami nie działa przy pierwszej próbie.

Wierzę, że daje to dostęp tylko do interaktywnej sesji 0, która istnieje tylko dla użytkownika nt organ \ użytkownik systemu

Andy
źródło
-2

Możesz użyć skrótu start (Windows) + R, aby uruchomić okno dialogowe „Uruchom”. Następnie wpisz „cmd” (bez cudzysłowów) i voila. cmd

Y2Forever
źródło
3
Witamy w SuperUser. Twój post nie odpowiada na pytanie PO. Począwszy CMDnormalnie nie nie wkładać jeden w Session 0.
Mówię: Przywróć Monikę