Benutzer mit den meisten Antworten
TaskID anhand Tasknamen und Benutzer finden und terminieren

Frage
-
Hallo,
ich benötige die TaskID einer EXE, die von einem bestimmten Benutzer ausgeführt wird.
Ich habe schon eine Möglichkeit gefunden um alle Benutzer auszulesen, welche die EXE ausführen. Benötige aber auch die dazugehörige TaskID um den Task zu beenden.
Hat einer ne Idee, was man in dem folgenden Code ergänzen muss, um auch die TaskID zu bekommen? (einfach den Taskmanager durchlaufen und die mehrfach ausgeführte EXE abschießen geht nicht)Dim strSQL As String Dim strWMI As String Dim oWMI As Object Dim objItem As Object Dim lngOldMouse As Long ' Mousecursor setzen (es ist eine längere Abfrage) lngOldMouse = Me.MousePointer Me.MousePointer = vbHourglass strComputerName = "." ' Abfragen festlegen strSQL = "Select * from Win32_Process where name = 'iexplore.exe'" strWMI = "winmgmts:\\" & strComputerName & "\root\cimv2" ' Abfrage durchführen Set oWMI = GetObject(strWMI).ExecQuery(strSQL) 'oWMI.getowner strNameOfUser, strUserDomain ' Alle zurückgegebenen Objekte durchlaufen Dim AA AA = "" For Each objItem In oWMI objItem.getowner strNameOfUser, strUserDomain strowner = strNameOfUser Debug.Print strowner AA = AA & Chr(13) & Chr(10) & strowner Next ' Mousecoursor zurücksetzen MousePointer = lngOldMouse MsgBox AA
http://www.vb-magazin.de/forums/forums/t/5591.aspx
Antworten
-
Problem jetzt gelöst.
Mit diesem Code läuft es wie gewünscht. Als Admin, kann man auf dem aktuellen Rechner(Server) beliebige Anwendungen anderer Benutzer abschießen.
"KillProcess - Terminate any application"
http://www.devx.com/vb2themax/Tip/19049
- Als Antwort markiert Philipp B. _ Freitag, 27. Mai 2011 06:41
Alle Antworten
-
Hab durch suchen und kombinieren selbst heraus gefunden.
Wenns jemanden noch interessiert, hier der Code:
Public Sub killProcess(ProcessName As String, ProcessOwner As String)
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
'auflisten aller Processe mit dem Name XYZ.exe
Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where Name = '" & ProcessName & "'")
For Each objProcess In colProcessList
'von jedem gefundenen Objekt den Benutzer prüfen
colProperties = objProcess.GetOwner(strNameofUser, strUserDomain)
'List1.AddItem objProcess.Name & vbTab & strNameofUser & vbTab & objProcess.ProcessID 'bei Bedarf, kann hier die ProcessID abgegriffen werden
'vergleichen, ob der gesuchte Benutzer gefunden wurde
If LCase(strNameofUser) = LCase(ProcessOwner) Then
'Process beenden
objProcess.Terminate
End If
Next
End SubTrotzdem danke an die, die sich Gedanken gemacht haben.
- Als Antwort markiert Thorsten DörflerModerator Mittwoch, 6. April 2011 10:50
- Tag als Antwort aufgehoben Philipp B. _ Freitag, 15. April 2011 06:07
-
War doch nicht so einfach wie gedacht.
Der Quellcode funktioniert leider nur mit dem eigenen Benutzerkonto.
Wenn ich mich am Server als "Admin" anmelde, kann ich nur die Tasks beenden, die ich selbst gestartet hab. Wenn z.B. auf dem Server die Anwendung msaccess.exe mehrmals geöffnet wurde, je von einem anderen Benutzer. Ich kann sie nur im Windowstaskmanager beenden.Ich kriege die TaskID(von Programm XY und Benutzer YZ) der anderen Benutzer raus, kann sie aber nicht mit dem oben beschriebenen Code beenden. Selbst "TerminalProcess" will da nicht gehen. Gibt auch keine Fehlermeldung. Als Result bekomme ich nur 0.
Hat jemand ne Idee?
-
Problem jetzt gelöst.
Mit diesem Code läuft es wie gewünscht. Als Admin, kann man auf dem aktuellen Rechner(Server) beliebige Anwendungen anderer Benutzer abschießen.
"KillProcess - Terminate any application"
http://www.devx.com/vb2themax/Tip/19049
- Als Antwort markiert Philipp B. _ Freitag, 27. Mai 2011 06:41