Process von einem bestimmten Benutzer Beenden

  • Hallo!

    Ich habe das Problem das ich 3 Benutzer habe die an meinem Rechner Arbeiten, nun habe ich also 3mal firefox.exe in meinem Taskmanager stehen.

    nun meine frage ist es möglich einen Process mittels ProcessClose bei nur einem bestimmten Benutzer zu nutzen?

    was genau ist mein problem:

    Alle haben den Firefox offen dieser Reagiert irgendwann nicht mehr (einfach nur weißes fenster) wenn ich nun mittels winclose($Fenster) beenden will kommt das obligatorische windows fenster "Programm Reagiert nicht mehr"
    dieses kann ich irgendwie mittels Autoit nicht bedienen wenn der Benutzer nicht angemeldet ist.

    vieleicht kann mir hier ja wer helfen

    gruß

  • Nunja anstatt des Prozessnamens verwendest du mal besser die Prozess ID (PID) in deinem processclose() Aufruf, da diese eindeutig ist und nur einen Prozess identifiziert. Du musst nun nur noch rausfinden welcher der Firefox Prozesse zu welchem Benutzer gehört. Das kannst du über die PID und diese Funktion herausfinden:

    [autoit]


    Func _ProcessOwner($pid=0,$hostname=".")
    $objWMIService = ObjGet("winmgmts://" & $hostname & "/root/cimv2")
    $colProcess = $objWMIService.ExecQuery("Select * from Win32_Process Where ProcessID ='" & $pid & "'")
    For $objProcess In $colProcess
    If $objProcess.ProcessID = $pid Then
    $usr = 0
    $objProcess.GetOwner($usr)
    Return $usr
    EndIf
    Next
    EndFunc

    [/autoit]

    EDIT:

    Aber davon mal ab solltest du eher das Problem lösen und nicht einfach nur den Browser töten. Ich tippe mal auf eine veraltete Version von Firefox, Flash oder irgendwelche seltsamen Add-Ons / Plugins.

  • erstmal danke für die schnelle antwort!

    das problem ist zu finden ist eine andere sache mir ist im moment wichtig das es mir möglich ist die "pid" (wie du sagst" zu "killen"
    gibt es auch eine möglichkeit ein fenster anhand der pid in vordergrund zu bringen? ich muss dazusagen das ich nicht gerade ein "profi" im autoit bin :S

    danke schonmal

  • gibt es auch eine möglichkeit ein fenster anhand der pid in vordergrund zu bringen?

    Ja, du musst bloß ersteinmal das Fenster-Hwnd der PID herausbekommen. Dies geht durch eine Abfrage aller Fenster mit WinList und einem anschließenden Vergleich jedes Fensters mit der gesuchten PID durch WinGetProcess.
    Hast du das Hwnd so ermittelt einfach das Fenster mit WinActivate in den Vordergrund holen.
    Oder natürlich durch die in Post #2 gepostete UDF.

    mittels winclose($Fenster) beenden will kommt das obligatorische windows fenster "Programm Reagiert nicht mehr"

    Wie wäre es mit der "böseren" Variante WinKill($winhwnd)?
    Hinwies: Dies ist natürlich keine Lösung des Problems weshalb Firefox nicht reagiert sondern nur erzwungener "Absturz" von Firefox.