none
TaskID anhand Tasknamen und Benutzer finden und terminieren RRS feed

  • 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

     

    Es muss nicht unbedingt der erwähnte Code sein. Wäre über jede Hilfe froh :-)

    Montag, 4. April 2011 06:25

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
    Freitag, 27. Mai 2011 06:40

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 Sub

     

    Trotzdem danke an die, die sich Gedanken gemacht haben.


    Montag, 4. April 2011 08:43
  • 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?

    Freitag, 15. April 2011 06:12
  • 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
    Freitag, 27. Mai 2011 06:40