2010-09-16 9 views
3

Je n'ai jamais étudié les systèmes d'exploitation, alors pardonnez-moi si cela semble basique ou stupide, mais je suis curieux de savoir si on pourrait remplacer l'invite cmd dans Windows. Je ne demande pas de programmes qui le font, car j'ai regardé autour de moi et je n'en ai pas vraiment vu. Ce que je demande est 1) s'il est réellement possible d'écrire un programme entièrement nouveau qui se comporterait comme cmd et 2) si on pouvait alors remplacer cmd avec lui, en supposant qu'il pourrait effectuer au moins tous les travaux qui cmd Est-ce que. Parce qu'il semble que même les programmes qui prétendent être une mise à jour (cygwin, powershell, etc) sont en cours d'exécution dans cette même petite fenêtre noire. Peut-être que je ne comprends pas complètement comment cmd s'intègre dans Windows dans son ensemble, ou comment quelque chose comme bash se connecte réellement dans Linux.Serait-il possible de remplacer CMD avec autre chose?

Quelqu'un veut-il me diriger dans la bonne direction?

+0

Essayez rxvt-native sur Cygwin ... pas de fenêtre noire. La fenêtre noire est juste l'abstraction "console" et n'est pas liée à "cmd.exe". –

+0

Quand vous dites, «accomplissez au moins tous les travaux que cmd fait», de quels travaux parlez-vous? Voulez-vous dire un programme qui peut exécuter tous les fichiers batch que cmd peut exécuter, ou vous référez-vous à d'autres travaux que cmd fait? Si oui, veuillez indiquer quels emplois. –

+0

Désolé d'être vague: oui, je voulais surtout dire "peut exécuter des fichiers batch" mais je l'ai laissé ouvert au cas où il y avait des choses cachées que cmd fait que je ne savais pas. – CodexArcanum

Répondre

4

"Cette même petite fenêtre noire" est une fonctionnalité du sous-système "console" de Windows. Les applications en mode console obtiennent cette fenêtre à peu près gratuitement, et l'ouvrent pour elles (soit par Windows elle-même soit par les libs d'exécution, je ne sais plus) quand elles sont démarrées depuis Windows plutôt que depuis la ligne de commande. (Les programmes en mode console exécutés à partir d'une console existante ont tendance à emprunter la console du processus parent.)

Le fait que les applications de console se ressemblent ne signifie pas nécessairement qu'elles sont toutes exécutées à partir de cmd.exe (bien qu'il y ait souvent un fichier batch qui les lance, ils peuvent être démarrés eux-mêmes), mais ils utilisent tous le même sous-système et les mêmes fonctionnalités.

Avec tout cela, il est tout à fait possible d'écrire un remplacement de cmd.exe. C'est juste une application de console. La capture le rend suffisamment compatible pour exécuter des fichiers batch (de peur que les applications existantes ne se cassent quand ils pensent utiliser cmd.exe), tout en ayant assez de flexibilité pour ajouter tout ce que vous voulez ajouter à un shell.

+0

Bien que j'apprécie toutes les réponses, je me sens comme celui-ci offre l'explication la plus complète. Je vous remercie! – CodexArcanum

0

CMD.EXE est juste un programme. Il n'y a rien de spécial à ce sujet.

+0

Alors, quel est le problème avec cette réponse? –

+0

Je ne vous ai pas déprécié (en fait, je me suis levé pour l'équilibrer), mais je suppose qu'il a été jugé trop concis pour être très utile. En fait, j'apprécie le sentiment que c'est juste un programme, pas d'accroche système ou de magie. – CodexArcanum

1

vous pouvez écrire une application qui vous permet de créer et d'exécuter des fichiers batch (.bat). Par exemple, supposons que vous utilisiez C# comme langue. Par exemple: vous pouvez ouvrir un flux de texte pour créer les fichiers (.bat). ensuite, vous pouvez les exécuter comme ceci:

ProcessStartInfo CmdReplacement = new System.Diagnostics.ProcessStartInfo(); 

//choose a name and then arguments that you want to send to the command prompt 
CmdReplacement.FileName = @"C:\testfile.bat"; 
CmdReplacement.Arguments = "1 2 3 4"; 

//if you use this property it will prevent a console window from popping up 
pi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 

//create new process and set starting information 
System.Diagnostics.Process p = new System.Diagnostics.Process(); 
p.StartInfo = CmdReplacement; 


//set this to tell you when the process has completed 
p.EnableRaisingEvents = true; 

p.Start(); 

//wait until the process has completed 
while(!p.HasExited) 
{ 
System.Threading.Thread.Sleep(1000); 
} 

//check to see what the exit code was 
if(p.ExitCode != 0) 
{ 
//some error occurred 
} 
+0

En tant que développeur C#, j'apprécie énormément le code. Ce serait un bon point de départ pour écrire une console/terminal en C#/quoi que ce soit. N'est-ce pas simplement en chargeant le fichier .bat dans le système par défaut (cmd pour 99%) et en l'exécutant, mais caché, et en capturant la sortie? – CodexArcanum

Questions connexes