2009-04-06 5 views
2

Ich versuche, alle Prozesse eines angegebenen Benutzers zu töten.kill alle Programme von Benutzer x mit vb.net

i verwenden

 Try 
     Shell("C:\WINDOWS\system32\taskkill.exe /S localhost /U userx /P passwort /f /FI " & Chr(34) & "USERNAME eq userx" & Chr(34)) 
    Catch ex As Exception 
     MessageBox.Show("LogoutException occurred. " + ex.Message) 
    End Try 

aber nichts geschah. Wenn ich versuche, diesen Befehl taskkill ..... per Konsole zu verwenden, funktioniert es gut. eine der apps, die geschlossen werden sollte, ist die explorer.exe. Alle Apps müssen vom Benutzer geschlossen werden.

Ich habe/u/p eingefügt, weil die Anwendung selbst unter einem anderen Benutzer ausgeführt wird.

hat jemand eine Idee, wie ich wirklich alle Prozesse von diesem 1 Benutzer töten könnte?

EDIT: Ich vergesse ein wenig Informationen, Die Anwendung wird von einem Benutzer mit Benutzerrechten gestartet. Deshalb benutze ich taskkill - da kann ich einen anderen Benutzer mit administrativ Privilegien eingeben. Also das zweite Problem ist, dass ich process.kill nicht direkt verwenden kann.

thx viel Hilfe.

Antwort

1
foreach (Process p in Process.GetProcesses()) 
{ 
    if (String.Equals(p.ProcessName, name)) 
    { 
     p.Kill(); 
    } 
} 

oder

Process.GetProcesses() 
.Where(p => String.Equals(p.ProcessName, name)) 
.First() 
.Kill(); // kills only first 

oder

Process.GetProcesses() 
.Where(p => String.Equals(p.ProcessName, name)) 
.ToList() 
.ForEach(p => p.Kill()); // kills all 
+0

Vielen Dank! - Ich vergesse eine wichtige Information, dass die Anwendung selbst keine administrativen Rechte hat - also konnte ich keine Anwendungen von einem anderen Benutzer löschen.Bei meinem Code benutze ich einen Benutzer mit Administratorrechten bei den Programmparametern von taskkill. - Ich habe meinen Eintrag bearbeiten. sorry ... – DrFuture

+0

thx mit Administratorrechten ist ein echter Code. – DrFuture

0

Wenn Sie die ID des Prozesses kennen, können Sie sie über die Process-Klasse löschen. Nehmen Sie dieses Code-Schnipsel zum Beispiel

Public Sub KillProcess(id as Integer) 
    For Each p as Process in Process.GetProcesses() 
    if p.Id = id Then 
     p.Kill() 
    End If 
    Next 
End SUb 
+0

Thx, aber ich havent' t die PID's. Die Prozesse sind jedes Mal anders - nur wenn ich alle Prozess-IDs von einem Benutzer auslesen kann. Kann ich auslesen, wenn ein Prozess beendet wird, versuche ich es öfter, um eine App zu beenden, wenn der erste Versuch fehlgeschlagen ist. – DrFuture

+0

@DrFuture Wenn Sie nicht die PID haben, wie wählen Sie den Prozess zu töten? – JaredPar

+0

@JaredPar von Benutzername, die den Prozess gestartet/besitzt – DrFuture

0

edg beantwortet meine Frage zu, aber ich kann nicht die Antwort in der Threadview ??? Nur bei meinem Profil.

Er schrieb ich sollte versuchen, die Domäne zu den Logindata hinzufügen. Es ist ein lokales Konto, so änderte ich den Code

Shell("C:\WINDOWS\system32\taskkill.exe /S localhost /U " & System.Net.Dns.GetHostName() & "\userx ......... 

aber nichts geändert.

+0

Vielleicht ist es besser, System.Diagnostics.Process.Start (System.IO.Path.Combine (Environment.GetFolderPath (Environment.SpecialFolder.System), "taskkill.exe"), String.Format ("/ S localhost/U {0} &/userx ", System.Net.Dns.GetHostName())); – abatishchev