ich mit der Process
Klasse von System.Diagnostics
arbeitete und hier ist mein Code:csharp Cygwin kann mintty.exe nicht töten
public void doMain() {
Process cygwin = new Process();
cygwin.StartInfo.FileName = "C:\\cygwin64\\bin\\mintty.exe";
cygwin.Start();
cygwin.Refresh();
Thread.Sleep(1000);
cygwin.Kill();
cygwin.WaitForExit();
}
Normalerweise sollte dieser mintty.exe
Prozess laufen und dann 1 Sekunde warten und dann diesen Prozess beenden, aber Es gibt mir den Fehler, dass es vor dem Kill-Aufruf geschlossen wurde.
Auf der Linie cygwin.Kill();
nennt diese Ausnahme auftritt:
Eine nicht behandelte Ausnahme des Typs ‚System.InvalidOperationException‘ in System.dll
Weitere Informationen aufgetreten: nicht Prozessanforderung kann, weil der Prozess beendet wird.
Warum passiert das ?!
Wenn ich die "C:\\cygwin64\\bin\\mintty.exe"
durch "C:\\cygwin64\\bin\\bash.exe"
ersetze, geht die Ausnahme weg!
Was ist das Problem?
Wenn Sie 'mintty.exe' von' Datei-Explorer' statt im Code ausführen, wird es sofort beendet? Ich habe das Gefühl, dass 'bash.exe' Ihnen ein Kommandozeilen-Dienstprogramm zur Verfügung stellt, wenn Sie es laden, aber' mintty' hat keine solche Sache. –
@JayGould Nein! warum sollte es sofort verlassen? Ich habe meinen Code auf 1000 Millisekunden warten lassen und dann den Prozess beendet. Nun, 'mintty.exe' ist irgendwie wie ein Wrapper für' bash.exe'. – newpeople
Fragen Sie sich zunächst, was dieser Fehler/diese Ausnahme während der Ausführung der Kill-Methode bedeutet. Während ich es lese, scheitert Kill, weil der Prozess, den Sie zu töten versuchen, bereits beendet ist. Lies meine Antwort unten. Der Start-Prozess erzeugt den Prozess #p, der den untergeordneten Prozess #c erzeugt. Prozess #p wird beendet. Prozess #c öffnet das Pfefferminz-Fenster. Sie versuchen, den Prozess #p zu beenden, aber er ist bereits beendet. Wie lautet die Prozessnummer im Cygwin-Objekt? Was ist die Prozessnummer (n) von minty (Hinweis: Task-Manager verwenden)? –