126 votes

Masquer la fenêtre de la console à partir de Process.Start C#

J'essaie de créer un processus sur une machine distante en utilisant la classe System.Diagnostics.Process. Je parviens à créer un processus. Mais le problème est que la création d'un service prend beaucoup de temps et qu'une fenêtre de console s'affiche. Une autre chose ennuyeuse est que la fenêtre de console est affichée au-dessus de mon formulaire Windows et je ne peux pas faire d'autres opérations sur ce formulaire. J'ai défini toutes les propriétés comme CreateNoWindow = true ,

proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden

J'ai même redirigé la sortie et les erreurs vers des flux distincts, mais sans succès.

Existe-t-il un autre moyen de masquer la fenêtre de la console ? Merci de m'aider.

Voici la partie de mon code que j'ai utilisée pour exécuter la commande sc.

Process proc = new Process();
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.StartInfo.FileName = "sc";
proc.StartInfo.Arguments = string.Format(@"\\SYS25 create MySvc binPath= C:\mysvc.exe");
proc.StartInfo.RedirectStandardError = false;
proc.StartInfo.RedirectStandardOutput = false;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.Start();
proc.WaitForExit();

157voto

John Bartels Points 479

J'ai eu un problème similaire en essayant de démarrer un processus sans afficher la fenêtre de la console. J'ai testé plusieurs combinaisons différentes de valeurs de propriétés jusqu'à ce que je trouve celle qui présentait le comportement que je souhaitais.

Voici une page qui explique pourquoi le UseShellExecute doit être fixée à false.
http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.createnowindow.aspx

Dans la section Remarques de la page :

Si l'option UseShellEx ne sont pas nulles, la valeur de la propriété CreateNoWindow est ignorée et une nouvelle fenêtre est créée.

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = fullPath;
startInfo.Arguments = args;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = true;

Process processTemp = new Process();
processTemp.StartInfo = startInfo;
processTemp.EnableRaisingEvents = true;
try
{
    processTemp.Start();
}
catch (Exception e)
{
    throw;
}

62voto

John Lockwood Points 1545

Je n'ai pas eu de chance avec cette réponse, le processus (Wix light.exe) allant essentiellement déjeuner et ne rentrant pas à temps pour le dîner. Cependant, la méthode suivante a bien fonctionné pour moi :

Process p = new Process();
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
// etc, then start process

25voto

Cela devrait fonctionner, essayez ;


Ajouter une référence de système.

using System.Diagnostics;

Utilisez ensuite ce code pour exécuter votre commande dans une fenêtre CMD cachée.

Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
cmd.StartInfo.Arguments = "Enter your command here";
cmd.Start();

13voto

Cela ne montre pas la fenêtre :

Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
cmd.StartInfo.CreateNoWindow = true;

...
cmd.Start();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X