Comment exécuter une application console C # avec la console cachée

Existe-t-il un moyen de masquer la fenêtre de la console lors de l’exécution d’une application console?

J’utilise actuellement une application Windows Forms pour démarrer un processus de console, mais je ne souhaite pas que la fenêtre de la console s’affiche pendant l’exécution de la tâche.

Si vous utilisez la classe ProcessStartInfo , vous pouvez définir le style de la fenêtre sur caché:

 System.Diagnostics.ProcessStartInfo start = new System.Diagnostics.ProcessStartInfo(); start.FileName = dir + @"\Myprocesstostart.exe"; start.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 

Si vous avez écrit l’application de console, vous pouvez la masquer par défaut.

Créez une nouvelle application de console, puis modifiez le type “Output Type” en “Application Windows” (fait dans les propriétés du projet)

Si vous utilisez Process Class, vous pouvez écrire

 yourprocess.StartInfo.UseShellExecute = false; yourprocess.StartInfo.CreateNoWindow = true; 

avant votre yourprocess.start(); et le processus sera caché

La réponse simple est la suivante: Accédez aux propriétés de votre application de console (propriétés du projet). Dans l’onglet “Application”, remplacez simplement le “Type de sortie” par “Application Windows”. C’est tout.

Vous pouvez utiliser l’API FreeConsole pour détacher la console du processus:

 [DllImport("kernel32.dll")] static extern bool FreeConsole(); 

(bien sûr, cela ne s’applique que si vous avez access au code source de l’application de la console)

Si le résultat vous intéresse, vous pouvez utiliser cette fonction:

 private static ssortingng ExecCommand(ssortingng filename, ssortingng arguments) { Process process = new Process(); ProcessStartInfo psi = new ProcessStartInfo(filename); psi.Arguments = arguments; psi.CreateNoWindow = true; psi.RedirectStandardOutput = true; psi.RedirectStandardError = true; psi.UseShellExecute = false; process.StartInfo = psi; SsortingngBuilder output = new SsortingngBuilder(); process.OutputDataReceived += (sender, e) => { output.AppendLine(e.Data); }; process.ErrorDataReceived += (sender, e) => { output.AppendLine(e.Data); }; // run the process process.Start(); // start reading output to events process.BeginOutputReadLine(); process.BeginErrorReadLine(); // wait for process to exit process.WaitForExit(); if (process.ExitCode != 0) throw new Exception("Command " + psi.FileName + " returned exit code " + process.ExitCode); return output.ToSsortingng(); } 

Il exécute le programme de ligne de commande donné, attend la fin et renvoie le résultat sous forme de chaîne.

Si vous créez un programme qui ne nécessite pas de saisie de l’utilisateur, vous pouvez toujours le créer en tant que service. Un service n’affichera aucun type d’interface utilisateur.

Je sais que je ne réponds pas exactement à ce que vous voulez, mais je me demande si vous posez la bonne question.

Pourquoi ne pas utiliser soit:

  1. service windows
  2. créer un nouveau sujet et lancer votre processus sur celui-ci

Ceux-ci ressemblent à de meilleures options si tout ce que vous voulez est d’exécuter un processus.

Bien que d’autres réponses indiquent que vous pouvez changer le “Type de sortie” en “Application Windows”, sachez que cela signifie que vous ne pouvez pas utiliser Console.In car il deviendra un NullStreamReader.

Console.Out et Console.Error semblent toujours fonctionner correctement.

Ajoutez ceci à votre classe pour importer le fichier DLL:

 [DllImport("user32.dll")] static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); const int SW_HIDE = 0; const int SW_SHOW = 5; 

Et puis, si vous voulez le cacher, utilisez cette commande:

 var handle = GetConsoleWindow(); ShowWindow(handle, SW_HIDE); 

Et si vous voulez montrer la console:

 var handle = GetConsoleWindow(); ShowWindow(handle, SW_SHOW); 

Ecrivez

 ProcessStartInfo psi= new ProcessStartInfo("cmd.exe"); ...... psi.CreateNoWindow = true; 

Sur la base de la réponse d’Adam Markowitz ci-dessus, les suivantes ont fonctionné pour moi:

 process = new Process(); process.StartInfo = new ProcessStartInfo("cmd.exe", "/k \"" + CmdFilePath + "\""); process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; //process.StartInfo.UseShellExecute = false; //process.StartInfo.CreateNoWindow = true; process.Start();