2017-04-15 2 views
-1

Ich muss zwischen den einzelnen Argumenten pausieren, damit die Befehle in der cmd-Konsole erfolgreich ausgeführt werden können.Wie pausiere ich die Ausführung in wpf-Anwendung während der Übergabe von Argumenten an cmd

Hier ist mein Code:

System.Diagnostics.ProcessStartInfo proc = new System.Diagnostics.ProcessStartInfo(); 
    proc.FileName = @"C:\windows\system32\cmd.exe"; 
    proc.Arguments = "/c net start defragsvc"; 

    proc.Arguments = "/c diskpart"; 

    proc.Arguments = "/c sel vol 1"; 

    proc.Arguments = "/c shrink desired =" + shrinksize + ""; 

    proc.Arguments = "/c exit"; 

    proc.Arguments = "/c exit"; 
    proc.Arguments = "/c net stop defragsvc"; 

    System.Diagnostics.Process.Start(proc); 
+0

sehen Sie zunächst markierte doppelte für einen Ansatz, dies ohne den UI-Thread zu blockieren. Siehe das zweite markierte Duplikat für den grundlegenden, GUI-unfreundlichen Ansatz, der in einer Antwort unten vorgeschlagen wird. –

Antwort

-1

Sie nur für die cmd Prozess warten müssen, um zu beenden.

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    int ExecuteWithCmd(string command) 
    { 
     ProcessStartInfo proc = new ProcessStartInfo(); 

     proc.FileName = @"C:\windows\system32\cmd.exe"; 
     proc.Arguments = string.Format("/c {0}", command); 

     Process newCmdProcess = Process.Start(proc); 
     newCmdProcess.WaitForExit(); 

     return newCmdProcess.ExitCode; 
    } 

    private void btnAction_Click(object sender, RoutedEventArgs e) 
    { 
     string shrinksize = "some value?"; 

     this.ExecuteWithCmd("net start defragsvc"); 
     this.ExecuteWithCmd("diskpart"); 
     this.ExecuteWithCmd("sel vol 1"); 
     this.ExecuteWithCmd("shrink desired =" + shrinksize); 
     this.ExecuteWithCmd("exit"); 
     this.ExecuteWithCmd("exit"); 
     this.ExecuteWithCmd("net stop defragsvc"); 

    } 
} 

Sie können den Rückgabewert auch verwenden, um festzustellen, ob der Befehl korrekt ausgeführt wurde.

+0

Vielen Dank für Ihre Antwort, – hustlecoder

+0

Aber der Code führt den ersten Befehl ordnungsgemäß, aber öffnet Diskpart in einem anderen Windows und stoppt – hustlecoder

+0

Die Diskpart-Windows zeigt und stoppt. Wenn ich es schließe .... andere Befehle laufen mit Fehlern und Anwendungen beendet. – hustlecoder

Verwandte Themen