Zum Inhalt springen

Process Tree beenden


affiX

Empfohlene Beiträge

Hi an alle Leser,

Ich habe momentan das folgende Problem:

Ich möchste alle Child Prozesse eines Parent Prozesses beenden.

Oder einfach gesagt einen Prozessbaum terminieren.

Jedoch muss die Lösung dieses Problems ohne Windows APIs realisiert werden!

Ich sollte am besten nur das .Net Framework verwenden!!!

Momentan habe ich mich mit der System.Diagnostics.Process Klasse beschäftigt, jedoch noch keine Lösung erzielt.

Würde mich über eine Antwort zu diesem Thema freuen.

mfg affix

Link zu diesem Kommentar
Auf anderen Seiten teilen

So wie ich das aus der MSDN gesehen hab, fehlt Dir in der Klasse Process der Hinweis auf a) den Parent-Prozess oder B) die Child-Prozesse.

Diese Info bräuchtest Du aber zwingend um den Teilbaum von hinten zu durchlaufen.

Hier wird das leider auch nur über Win32-API gemacht:

http://www.mobzystems.com/code/killprocesstree.aspx

Bearbeitet von VaNaTiC
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

Dir steht im .Net Framework auch der Namensraum

System.ServiceProcess

zur Verfügung. Hier könntest Du einen ServiceController nutzen welcher Dir abhängige Dienste und Dienste von denen dieser Prozess abhängt anzeigt.

Ich habe im Code mal eine sehr simples Beispiel anhand eines TreeView erstellt. Dies ist wie gesagt nur ein Beispiel und legt keinen Wert auf Codequlität!


        private void Form1_Load(object sender, EventArgs e)

        {


            ServiceController[] controllers = ServiceController.GetServices("Dein Rechnername");

            foreach (ServiceController sc in controllers)

            {

                TreeNode tn = new TreeNode(sc.DisplayName);

                TreeNode parent = new TreeNode("Parents");


                    foreach (ServiceController p in sc.ServicesDependedOn)

                    {

                        parent.Nodes.Add(p.DisplayName);

                    }

                    tn.Nodes.Add(parent);

                TreeNode child = new TreeNode("Childs");

                    foreach (ServiceController c in sc.DependentServices)

                    {

                        child.Nodes.Add(c.DisplayName);

                    }

                tn.Nodes.Add(child);

                treeViewProzesse.Nodes.Add(tn);

            }


        }

Die TreeView wird mit allen "Dienste" gefüllt. In den Unterordnern werden Childs und Parents angezeigt.

Wenn Du hier etwas Fleiß reinsteckst wirst Du bald eine Möglichkeit finden diesen Tree nach Abhängigkeiten zu sortieren und damit dein Problem zu lösen.

Viele Grüße,

Thomas

Link zu diesem Kommentar
Auf anderen Seiten teilen

Vielen Dank für eure Hilfe!

Jedoch muss ich jetzt noch mal eine Frage zu deinem Beispiel stellen.

Mit Hilfe des ServiceController erhalte ich doch nur Windows Dienste!

Ich benötige aber alle Prozesse bzw. alle Childs zu einem bestimmten Prozess X,

welche im Windows Taskmanager aufgelistet werden.

Ich werde mich jetzt mit euren Beispielen beschäftigen und anschließend ein Feedback schreiben.

cu

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

ja genau. hier werden nur Windowsdienste angegeben.

Ich schließe mich der vorherigen frage nach der Art der Anwendung an. Einen Prozess zu terminieren sollte nicht die Regel sein sondern eher eine Notlösung.

Beim Beenden eines Prozesses über den Taskmanager erhält man ja schon eine Warnung welche auf Systeminstabilität hinweist.

Also was willst Du mit diesem Vorgang bezwecken? Windowsdienste zu starten, anzuhalten oder zu beenden ist manchmal ganz nützlich, aber wirklich alle Prozesse?

Und warum kein Win32?

Gruß,

Thomas

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...