2013-01-11 10 views
6

Ich habe ein Dienstprogramm entwickelt, das Zeit aller Server in der Liste bekommen wird.Willst du die cmd Eingabeaufforderung Bildschirm verstecken

System.Diagnostics.Process p; 
string server_name = ""; 
string[] output; 
p = new System.Diagnostics.Process(); 
p.StartInfo.FileName = "net"; 
p.StartInfo.UseShellExecute = false; 
p.StartInfo.RedirectStandardOutput = true; 
p.StandardOutput.ReadLine().ToString() 

Während der Ausführung dieses Codes. Cmd Prompt-Bildschirme kommen. Ich möchte es vor dem Benutzer verstecken. Was kann ich dafür tun?

Antwort

11

Sie den Prozess sagen kann kein Fenster verwenden oder zu minimieren:

// don't execute on shell 
p.StartInfo.UseShellExecute = false; 
p.StartInfo.CreateNoWindow = true; 

// don't show window 
p.StartInfo.WindowStyle = ProcessWindowStyle.Minimized; 

mit UseShellExecute = false Sie die umleiten kann Ausgabe:

// redirect standard output as well as errors 
p.StartInfo.RedirectStandardOutput = true; 
p.StartInfo.RedirectStandardError = true; 

Wenn Sie dies tun, sollten Sie asynchrones Lesen der Ausgangspuffer d verwenden einen Deadlock wegen überfüllten Puffern zu vermeiden: wie diese

StringBuilder outputString = new StringBuilder(); 
StringBuilder errorString = new StringBuilder(); 

p.OutputDataReceived += (sender, e) => 
      { 
       if (e.Data != null) 
       { 
        outputString.AppendLine("Info " + e.Data); 
       } 
      }; 

p.ErrorDataReceived += (sender, e) => 
      { 
       if (e.Data != null) 
       { 
        errorString.AppendLine("EEEE " + e.Data); 
       } 
      }; 
+0

UseShellExecute = false erlaubt es Ihnen auch STDOUT und STDERR in Ströme umzuleiten, die nützlich sein können. –

+0

@SrikanthVenugopalan Ich habe es weggelassen, weil das OP es bereits getan hat. – Matten

+1

ja du hast Recht, mein Schlechter. Obwohl, ich persönlich finde RedirectStandardError ist wichtiger. –

0

versuchen, diese beiden

p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 

oder überprüfen Sie dies auch

Um ohne Fenster, das Kind Prozess laufen,

die CreateNoWindow Eigenschaft verwenden und UseShellExecute gesetzt.

ProcessStartInfo info = new ProcessStartInfo(fileName, arg); 
info.CreateNoWindow = true; 
info.UseShellExecute = false; 
Process processChild = Process.Start(info); 

Ich schlage vor, Sie throught diesen Beitrag von MSDN zu gehen: How to start a console app in a new window, the parent's window, or no window

4

Versuchen mit ProcessWindowStyle Aufzählung;

p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
p.StartInfo.UseShellExecute = false; 
p.StartInfo.CreateNoWindow = true; 

Die versteckte Fenster Stil. Ein Fenster kann entweder sichtbar oder ausgeblendet sein. Das System zeigt ein ausgeblendetes Fenster an, indem es nicht gezeichnet wird. Wenn ein Fenster ausgeblendet ist, wird es effektiv deaktiviert. Ein verstecktes Fenster kann Meldungen vom System oder von anderen Fenstern verarbeiten, aber Eingaben vom Benutzer oder der Anzeige können nicht verarbeitet werden. Häufig kann eine Anwendung ein neues Fenster ausgeblendet halten, während es das Aussehen des Fensters anpasst, , und dann das Fensterformat Normal erstellen. Zur Nutzung ProcessWindowStyle.Hidden, die ProcessStartInfo.UseShellExecute Eigenschaft muss falsch sein.

0

Hinzufügen einer Systemreferenz.

using System.Diagnostics; 

Verwenden Sie dann diesen Code, um Ihren Befehl in einem hiden CMD-Fenster auszuführen.

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