Sessione interattiva 0 in Windows 7


14

Sto provando ad avviare cmd.exe nella sessione 0. Finora ho fatto quanto segue da un prompt dei comandi con privilegi elevati:

sc config UI0Detect start= auto
net start UI0Detect

E la risposta indica che il servizio è stato avviato correttamente. È a questo punto che ho ipotizzato che se passassi alla sessione 0, cmd.exe sarebbe in esecuzione.

Passo alla sessione 0 usando il seguente comando:

rundll32 winsta.dll,WinStationSwitchToServicesSession

Questo mi porta correttamente alla sessione 0, ma l'unica finestra disponibile è quella che ha l'opzione per tornare alla sessione 1.

Come faccio ad avviare cmd.exe nella sessione 0?


Perché vorresti farlo? UI0Detect consente ai vecchi servizi di visualizzare una finestra di messaggio, non di avviare nuove app GUI. cmd.exe ha una GUI
Peter Hahndorf,

6
@PeterHahndorf Capisco che è divertente deviare la risposta alle domande dicendo "facciamo un passo indietro e vediamo se questo è ciò che dobbiamo veramente fare perché sembra una cattiva idea", ed è un modo relativamente carino per condannare i colleghi sviluppatori. Ma poiché questo è per uno scenario di debug e inteso come una soluzione rapida (e alternativa all'utilizzo di alcune app di terze parti come AlwaysUp), non vedo davvero come chiedere "perché" sia una risposta utile. Grazie comunque.
omghai2u,

Penso che Peter abbia ragione. La domanda che avresti dovuto scrivere è "Questo è quello che sto cercando di fare". Una soluzione rapida comporterà solo dolori futuri. Non posso contare quante volte ho sentito "correzione rapida" solo per vedere ancora la "correzione rapida" in produzione tre anni dopo. . . bisogno di un'altra "soluzione rapida". Suppongo che stai scrivendo per eseguire uno script batch di qualche tipo?
surfasb,

1
@surfasb La domanda che hai suggerito è essenzialmente la domanda che ho scritto: "Sto cercando di avviare cmd.exe nella sessione 0." Si prega di mantenere le risposte focalizzate su quella domanda. Grazie. E non c'è alcuna possibilità che questo possa farsi strada nella produzione o che coinvolga il dolore futuro. Il modo in cui lo faccio per la produzione è già impostato ma non posso utilizzarlo per il debug. Il modo in cui lo faccio attualmente per il debug è ingombrante e prevede l'utilizzo di un'app di terze parti.
omghai2u,

Risposte:


19

Per avviare cmd.exe nella sessione 0, utilizzare psexec da Sysinternals

psexec.exe -s 0 cmd.exe

Ora hai una console in esecuzione nella sessione 0,

puoi anche avviare cmd.exe nella sessione 0 e visualizzare la GUI:

psexec.exe -s -i 0 cmd.exe

in questo modo quando passi alla sessione 0, il cmd.exe ti aspetterà lì.

hai tutti i diritti che puoi ottenere in Windows 7:

whoami /all

se usi altri PsTools, ricorda di usare l'opzione / accepteula:

pslist /accepteula

in caso contrario il programma fa apparire una finestra di messaggio per chiedere di accettare l'Eula, il programma si bloccherà perché non c'è UI nella sessione 0 per chiudere la finestra di messaggio.

Per verificare che sia in esecuzione nella sessione 0, è possibile utilizzare qprocess:

qprocess /ID:0

vedrai il tuo 'cmd.exe' tra tutti i processi di servizio.


Incredibile grazie per aver tentato di rispondere alla mia domanda. Questo avrebbe sicuramente funzionato, la mia intenzione specifica (come sottolineato nei commenti), tuttavia era quella di evitare l'uso di app di terze parti. C'è un bel modo per farlo che non richiede l'uso degli strumenti SysInternals (o davvero tutto ciò che non è disponibile su Windows)? Grazie ancora.
omghai2u,

2
Non considero i "terzi" degli strumenti Sysinternal che provengono da Microsoft e non è necessario installarli.
Peter Hahndorf,

Spiacenti, stavo considerando tutto ciò che non è installato per impostazione predefinita "di terze parti".
omghai2u,

Peter. Fantastico grazie. Funziona perfettamente per l'avvio di un processo nella sessione 0 (il che significa che continua a funzionare quando ti disconnetti.)
Daniel James Bryars

5
La prima riga di comando è errata: -sviene eseguita come SYSTEMutente e non accetta argomenti. Forse intendevi -i 0nel primo esempio e -s -i 0nel secondo?
jwg

1

Non funzionerà Si avvia semplicemente un processo come Sistema.

I servizi sono programmi scritti in un modo speciale per accettare comandi dal responsabile del controllo dei servizi.

MS ha un'utilità che consente di eseguire un programma come servizio. Si chiama Srvanyed è negli strumenti del Resource Kit di Windows 2003.

Scarica gli strumenti del Resource Kit di Windows Server 2003


0

Un giorno ho scoperto la soluzione per caso, ma http://www.alex-ionescu.com/?p=59 documenta anche una soluzione vicina a ciò che ho trovato

Crea un file batch con il seguente (chiamalo some.bat)

start cmd

Quindi creare un servizio per chiamare questo file batch (utilizzando un prompt dei comandi di amministrazione)

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

(Nota lo spazio dopo ogni =, e suggerisco di usare il percorso completo per some.bat)

Quindi si tratta di avviare i servizi

sc start ui0detect
sc start access0

(Non è necessario eseguire ui0detect auto start con sc config UI0Detect start = auto)

E se tutto va bene, otterrai la scatola lampeggiante di messaggi imminenti! Vai a Visualizza messaggi e avrai un prompt dei comandi Admininstrator (nt autorità \ sistema) che non verrà automaticamente distrutto da un avvio del servizio non riuscito (da qui la necessità di un file batch con il comando start)

Questo funziona, anche se a volte non funziona al primo tentativo.

Credo che questo ti dia accesso solo alla sessione interattiva 0, che esiste solo per l'autorità nt \ utente del sistema


-2

È possibile utilizzare il collegamento di avvio (Windows) + R per avviare la finestra di dialogo "Esegui". Da lì, basta digitare 'cmd' (senza virgolette) e voilà. cmd


3
Benvenuto in SuperUser. Il tuo post non risponde alla domanda dei PO. Iniziare CMDnormalmente non ne inserisce uno Session 0.
Dico Reinstate Monica il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.