Laden...

ProzessKiller

Erstellt von citizen.ron vor 16 Jahren Letzter Beitrag vor 16 Jahren 10.977 Views
citizen.ron Themenstarter:in
432 Beiträge seit 2005
vor 16 Jahren
ProzessKiller

Beschreibung:
Mich ärgert, dass beim Systemstart von Windows diverse Prozesse gestartet werden, auf die ich gerne verzichte, von denen aber einige gar keine Möglichkeit bieten, per Anwendungseinstellung Ihren Start zu verhindern (Bsp.: HP Softwareupdates für Druckertreiber.

Beiliegendes Konsolenprojekt arbeitet eine in der config-Datei hinterlegten StringList ab und tötet alle dort aufgeführten Prozesse.

Die config-Datei sieht so aus:


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="KillProcess.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <applicationSettings>
        <KillProcess.Properties.Settings>
            <setting name="ProcessList" serializeAs="Xml">
                <value>
                    <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xmlns:xsd="http://www.w3.org/2001/XMLSchema">
                        <string>iPodService</string>
                        <string>qttask</string>
                        <string>FjtwSetup</string>
                        <string>hpwuSchd</string>
                        <string>winampa</string>
                        <string>jusched</string>
                        <string>iTunesHelper</string>
                        <string>Microsoft.Crm.Application.Hoster</string>
                    </ArrayOfString>
                </value>
            </setting>
            <setting name="AutoClose" serializeAs="String">
                <value>False</value>
            </setting>
        </KillProcess.Properties.Settings>
    </applicationSettings>
</configuration>

...der gesamte Code ist:

using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.Collections.Specialized;
using KillProcess.Properties;

namespace KillProcess
{

   class Program
   {
      static void Main(string[] args)
      {
         StringCollection processList = Settings.Default.ProcessList;

      // Willkommensgruß :-)
         Console.ForegroundColor = ConsoleColor.White;
         Console.WriteLine("Prozesse werden geprüft...");
         Console.WriteLine();

      // Prozessliste abarbeiten
         foreach (string processName in processList)
         {
            Process[] processes = Process.GetProcessesByName(processName);
            if (processes.Length > 0)
            {/*Prozess ist aktiv*/
               Console.ForegroundColor = ConsoleColor.White;
               Console.Write("  Prozess gefunden: ");
               Console.ForegroundColor = ConsoleColor.Red;
               Console.Write(processName);
               Console.ForegroundColor = ConsoleColor.White;
               Console.Write("...");

               for (int i = 0; i < processes.Length; i++)
                  processes[i].Kill();

               Console.ForegroundColor = ConsoleColor.Green;
               Console.WriteLine("beendet.");
            }
            else
            {/*Hinweis für nicht aktiven Prozess*/
               Console.ForegroundColor = ConsoleColor.White;
               Console.Write("  Prozess nicht aktiv: ");
               Console.ForegroundColor = ConsoleColor.Green;
               Console.WriteLine(processName);
            }

            Console.WriteLine();

         } // Prozesslistenschleife

      // Ggf. auf Benutzertaste warten
         if (!Settings.Default.AutoClose)
         {
            Console.ForegroundColor = ConsoleColor.White;
            Console.WriteLine();
            Console.WriteLine("Drücken Sie eine Taste um das Fenster zu schließen.");
            Console.ReadKey();
         }
      }
   }
}

Schlagwörter: Process, Tools

Viel Spaß damit,
ron

4.207 Beiträge seit 2003
vor 16 Jahren

Das ist schon mal super 🙂

Was noch richtig cool wäre, wenn Deine Applikation den Speicher kontinuierlich überwacht, und den Müll auch wieder abschießt, wenn die Programme im Nachhinein gestartet werden (vielleicht konfigurierbar, bei welchen das so sein soll).

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

citizen.ron Themenstarter:in
432 Beiträge seit 2005
vor 16 Jahren

Hi Golo,

stimmt, das ist eine gute Idee.
und dann am besten als Dienst mit TrayIcon und allem drum und dran...

@alle:
Also, wer mitmachen will...

P
216 Beiträge seit 2006
vor 16 Jahren

Hallo citizen.ron,

Das Projekt ist interessant.

Was mich etwas "komisch" stimmt, dass man das eigentlich einfach über START / Ausführen / msconfig / Tab "Systemstart" setzen kann.

Nur so als Denkanstoss.

Grüsse, pro

664 Beiträge seit 2005
vor 16 Jahren

Hi,

IMHO müssen sich alle Programme in der Registry oder im Autostart eintragen um gestartet zu werden. Mit msconfig lässt sich schon relativ viel abschalten. Jedoch nerven die Programme, die sich immer wieder eintragen. Daher wäre ein Programm dass das unter Kontrolle hällt nicht schlecht 🙂

citizen.ron Themenstarter:in
432 Beiträge seit 2005
vor 16 Jahren

Hi Pro,

ja, das stimmt, für die meisten geht das - leider aber nicht für alle.

Im oben geschilderten Fall (sprich: auf meinem Rechner) bspw. sind der MS CRM Hoster und der iPodService inder Systemstartlasche nicht aufgeführt und auch sonst nicht ohne weiteres zu finden.

Das Projekt ist eben ein schneller Weg, die Dinger loszuwerden, wie er uns als Programmierer eben offen steht - kleine Fingerübung quasi 😉

664 Beiträge seit 2005
vor 16 Jahren

Original von citizen.ron
Im oben geschilderten Fall (sprich: auf meinem Rechner) bspw. sind der MS CRM Hoster und der iPodService inder Systemstartlasche nicht aufgeführt und auch sonst nicht ohne weiteres zu finden.

Hi,

hat jetzt nichts direkt mit dem Projekt zu tun, aber wieso steht der bei dir nicht in der Liste? Ich hab den drin 😉 Hast du den Laptop- oder Desktopclient installiert?

1.820 Beiträge seit 2005
vor 16 Jahren

Hallo!

Das Problem beim Abschießen neuer Prozesse ist ja, dass man erstmal einen Weg finden muss, sich über neue Prozesse benachrichtigen zu lassen.
Ich hatte das selbst mal für einen Install-Wächter versucht, und hab' einfach keinen Weg gefunden (egal ob Windows-Hooks oder Nachrichten).
Evtl. ging's noch per EventLog, nur muss man dann an den jeweiligen Rechnern erst das EventLog entsprechend anpassen, und die dabei anfallenden Meldungen sind schon eine Masse.

Nobody is perfect. I'm sad, i'm not nobody 🙁

664 Beiträge seit 2005
vor 16 Jahren

Hi,

ich denke bei einem solchen Programm reicht es aus die Prozessliste periodisch abzurufen und dann nach den definierten Prozessen zu suchen.

D
10 Beiträge seit 2007
vor 16 Jahren

Das erkennen, wann ein Prozess gestartet wurde, sollte recht einfach über WMI Events möglich sein.
WMI Event (Win32_ProcessStartTrace)
How To: Receive Management Events Without Waiting

viel Erfolg