Session interactive 0 dans Windows 7

14

J'essaie de lancer cmd.exe dans la session 0. Jusqu'à présent, j'ai fait ce qui suit à partir d'une invite de commande élevée:

sc config UI0Detect start= auto
net start UI0Detect

Et la réponse indique que le service a été démarré correctement. C'est à ce stade que j'ai supposé que si je passais à la session 0, cmd.exe serait en cours d'exécution.

Je passe à la session 0 en utilisant la commande suivante:

rundll32 winsta.dll,WinStationSwitchToServicesSession

Cela me fait passer à la session 0, mais la seule fenêtre disponible est celle qui a la possibilité de revenir à la session 1.

Comment lancer cmd.exe dans la session 0?

omghai2u
la source
Pourquoi voudriez-vous faire ça? UI0Detect permet aux anciens services d'afficher une boîte de message, sans démarrer de nouvelles applications GUI. cmd.exe a une interface graphique
Peter Hahndorf
6
@PeterHahndorf Je comprends qu'il est amusant de détourner les réponses aux questions en disant "prenons un peu de recul et voyons si c'est vraiment ce que nous devons faire car cela semble être une mauvaise idée", et c'est une manière relativement agréable de condescendre les autres développeurs. Mais comme c'est pour un scénario de débogage et destiné à être une solution rapide (et alternative à l'utilisation d'une application tierce comme AlwaysUp), je ne vois pas vraiment comment demander "pourquoi" est une réponse utile. Merci quand même.
omghai2u
Je pense que Peter a raison. La question que vous auriez dû écrire est "Voici ce que j'essaie de faire". Une solution rapide n'impliquera que des douleurs futures. Je ne peux pas compter combien de fois j'ai entendu "solution rapide" seulement pour voir la "solution rapide" en production trois ans plus tard. . . besoin d'une autre "solution rapide". Je suppose que vous tapez pour exécuter un script de traitement par lots?
surfasb
1
@surfasb La question que vous avez suggérée est essentiellement la question que j'ai écrite: "J'essaie de lancer cmd.exe dans la session 0." Veuillez garder les réponses concentrées sur cette question. Merci. Et il n'y a aucune chance que cela se fraye un chemin dans la production, ou qu'il entraîne une douleur future. La façon dont je le fais pour la production est déjà définie mais je ne peux pas l'utiliser pour le débogage. La façon dont je le fais actuellement pour le débogage est lourde et implique l'utilisation d'une application tierce.
omghai2u

Réponses:

19

Pour lancer cmd.exe dans la session 0, utilisez psexec de Sysinternals

psexec.exe -s 0 cmd.exe

Vous avez maintenant une console en cours d'exécution dans la session 0,

vous pouvez également démarrer cmd.exe dans la session 0 et afficher l'interface graphique:

psexec.exe -s -i 0 cmd.exe

De cette façon, lorsque vous passez à la session 0, le cmd.exe vous y attendra.

vous avez autant de droits que vous pouvez obtenir dans Windows 7:

whoami /all

si vous utilisez d'autres PsTools, n'oubliez pas d'utiliser le commutateur / accepteula:

pslist /accepteula

sinon, le programme affiche une boîte de message pour demander d'accepter l'Eula, le programme se bloque car il n'y a pas d'interface utilisateur dans la session 0 pour fermer la boîte de message.

Pour vérifier que vous êtes en cours d'exécution dans la session 0, vous pouvez utiliser qprocess:

qprocess /ID:0

vous verrez votre «cmd.exe» parmi tous les processus de service.

Peter Hahndorf
la source
Super merci d'avoir tenté de répondre à ma question. Cela fonctionnerait certainement, mon intention spécifique (comme indiqué dans les commentaires), était cependant d'éviter d'utiliser des applications tierces. Existe-t-il une bonne façon de faire cela qui ne nécessite pas l'utilisation d'outils SysInternals (ou vraiment tout ce qui n'est pas disponible sur Windows)? Merci encore.
omghai2u
2
Je ne considère pas les outils Sysinternal «tiers», ils sont de Microsoft et vous n'avez pas à les installer.
Peter Hahndorf
Désolé, je considérais tout ce qui n'était pas installé par défaut "3ème partie".
omghai2u
Peter. Super merci. Fonctionne parfaitement pour démarrer un processus dans la session 0 (ce qui signifie qu'il continue de fonctionner lorsque vous vous déconnectez.)
Daniel James Bryars
5
La première ligne de commande est incorrecte: -ss'exécute en tant SYSTEMqu'utilisateur et ne prend pas d'argument. Peut-être vouliez-vous dire -i 0dans le premier exemple et -s -i 0dans le second?
jwg
1

Ça ne marchera pas. Il démarre simplement un processus en tant que système.

Les services sont des programmes écrits d'une manière spéciale pour accepter les commandes du gestionnaire de contrôle des services.

MS a un utilitaire qui permet d'exécuter un programme en tant que service. Il est appelé Srvanyet se trouve dans les outils du Kit de ressources Windows 2003.

Télécharger les outils du Kit de ressources Windows Server 2003

David
la source
0

J'ai découvert la solution par accident un jour, mais http://www.alex-ionescu.com/?p=59 documente également une solution proche de ce que j'ai trouvé

Créez un fichier batch avec ce qui suit (appelez-le some.bat)

start cmd

Créez ensuite un service pour appeler ce fichier de commandes (à l'aide d'une invite de commandes d'administration)

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

(Notez l'espace après chaque =, et je suggère d'utiliser le chemin complet pour some.bat)

Il s'agit ensuite de démarrer les services

sc start ui0detect
sc start access0

(Il n'est pas nécessaire de démarrer automatiquement ui0detect avec sc config UI0Detect start = auto)

Et si tout se passe bien, vous obtiendrez la boîte clignotante de messages imminents! Accédez à Afficher les messages et vous obtiendrez vous-même une invite de commande Admininstrator (autorité nt \ système) qui ne sera pas détruite automatiquement par un échec du démarrage du service (d'où la nécessité d'un fichier de commandes avec la commande de démarrage)

Cela fonctionne, bien que parfois cela ne fonctionne pas du premier coup.

Je crois que cela vous donne accès à la session interactive 0 uniquement, qui n'existe que pour l'utilisateur nt Authority \ system

Andy
la source
-2

Vous pouvez utiliser le raccourci démarrer (Windows) + R pour ouvrir la boîte de dialogue «Exécuter». De là, tapez simplement 'cmd' (sans guillemets) et le tour est joué. cmd

Y2Forever
la source
3
Bienvenue dans SuperUser. Votre message ne répond pas à la question OP. Commencer CMDnormalement n'en met pasSession 0 .
Je dis Reinstate Monica