Was ist zu tun, wenn der obige Code eine Ausnahme zurückgibt (32-Bit-Prozesse können nicht auf Module eines 64-Bit-Prozesses zugreifen)?
Manish
40
Lassen Sie ".exe" weg. Von MSDN: "Der Prozessname ist ein
1
@AgainMe Process.Kill () sendet ein Kill-Signal an einen Prozess, der seine Ausführung an jedem Ort anhält. Dies unterscheidet sich von einem Interrupt-Signal darin, dass der Prozess keine Chance hat, auf das Signal zu reagieren und / oder es zu bereinigen. In diesem Prozess wird keine Ausführung mehr ausgeführt, und alle Sperren für die von diesem Prozess verwendeten Ressourcen werden aufgehoben. Environment.Exit () wird vom aktuell ausgeführten Prozess ausgeführt, um sich selbst mit einem Erfolgscode zu töten, der absolut sicher ist. Process.Kill () ist bei weitem nicht so sicher wie Environment.Exit ().
Jchitel
2
Ich schlage die Verwendung von LINQ vor: var procs = Process.GetProcesses (). Where (pr => pr.ProcessName.Contains ("Spotify"));
Leandro
2
Gibt es eine Option, um eine bestimmte Instanz eines Prozesses zu beenden? Ich meine, Contains("Spotify"))tötet alle Instanzen von Spotify. Ich möchte eine bestimmte Instanz von töten Spotify.
var chromeDriverProcesses =Process.GetProcesses().Where(pr => pr.ProcessName=="chromedriver");// without '.exe'foreach(var process in chromeDriverProcesses){
process.Kill();}
conststring processName ="chromedriver";// without '.exe'awaitProcess.GetProcesses().Where(pr => pr.ProcessName== processName).ToAsyncEnumerable().ForEachAsync(p => p.Kill());
Hinweis: Die Verwendung von asyncMethoden bedeutet nicht immer, dass Code schneller ausgeführt wird, verschwendet jedoch nicht die CPU-Zeit und verhindert, dass der Vordergrund-Thread während der Ausführung hängt. In jedem Fall müssen Sie überlegen, welche Version Sie möchten.
Sie könnten Contains anstelle von gleich verwenden
Leandro
10
Ein lustiger Zufall ist, dass ich in diesem Thread nach einer Lösung gesucht habe, um den Chromedriver zu töten. Muss ein häufiges Problem sein.
Kerl
Hier gilt das gleiche. das scheint es aber nicht zu lösen. Die anfängliche Konsole, die ausgelöst wird, ist tatsächlich eine Instanz von chrome.exe, und ich vermute, Sie möchten nicht alle schließen, es sei denn, es handelt sich um einen Build- / Test-Agenten
Sie können eine bestimmte Instanz von MS Word beenden.
foreach(var process inProcess.GetProcessesByName("WINWORD")){// Temp is a document which you need to kill.if(process.MainWindowTitle.Contains("Temp"))
process.Kill();}
publicvoidEndTask(string taskname){string processName = taskname.Replace(".exe","");foreach(Process process inProcess.GetProcessesByName(processName)){
process.Kill();}}//EndTask("notepad");
Zusammenfassung : Unabhängig davon, ob der Name .exe enthält, wird der Vorgang beendet. Sie müssen ".exe nicht vom Prozessnamen weglassen", es funktioniert zu 100%.
Antworten:
Schnelle Antwort:
(Lassen Sie .exe vom Prozessnamen weg)
quelle
Contains("Spotify"))
tötet alle Instanzen vonSpotify
. Ich möchte eine bestimmte Instanz von tötenSpotify
.Meine Lösung besteht darin, Process.GetProcess () zum Auflisten aller Prozesse zu verwenden.
Indem ich sie filtere, um die gewünschten Prozesse zu enthalten, kann ich die Process.Kill () -Methode ausführen , um sie zu stoppen:
Aktualisieren:
Wenn Sie den
async
Ansatz mit einigen nützlichen neueren Methoden ausC# 8
( Async Enumerables ) verwenden möchten , überprüfen Sie Folgendes :quelle
Sie können verwenden
Process.GetProcesses()
, um die aktuell ausgeführten Prozesse abzurufen und dannProcess.Kill()
einen Prozess abzubrechen.quelle
Wenn Sie die Prozess-ID (
PID
) haben, können Sie diesen Prozess wie folgt beenden:quelle
Sie können eine bestimmte Instanz von MS Word beenden.
quelle
Zusammenfassung : Unabhängig davon, ob der Name .exe enthält, wird der Vorgang beendet. Sie müssen ".exe nicht vom Prozessnamen weglassen", es funktioniert zu 100%.
quelle
.Replace(".exe", "")
Antwort auf die oberste Stimme würde dies mit viel weniger