IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Ako zabíjať Windows Update

Ak ste vlastníkmi operačného systému Windows, určite sa vám už niekoľkokrát stalo, že sa počítač reštartoval s hláškou "Aktualizácia boli úspešne nainštalované". V prvých chvíľach panika a strašný agresívne rev. Potom premýšľanie čo som mal otvorené, o čo som prišiel.

No, keďže sme počítačový znalci tak si vytvoríme program, ktorý nám bude daný proces kontrolovať a zabíjať.

Vytvoríme si nový projekt a zvolíme konzolová aplikácie.

Pridáme novú triedu (kliknutí na projekt pravým tlačítkom myši -> add -> class) napríklad ProcessManager.

Vytvorí sa nám nový súbor, kde je názov triedy. Pridáme privátne premennú _process typu String a konštruktor, kde premennú nastavíme.

class ProcessManager
{
    private String _process;

    public ProcessManager(String process)
    {
        _process = process;
    }
}

Teraz vytvoríme metódu, ktorá nájde všetky inštancie zadaného procesu a pozabíja je.

private void killProcess()
{
     Process[] all = Process.GetProcessesByName(_process);

     foreach (Process p in all)
     {
         p.Kill();
     }
}

Určite by to chcelo, aby sa existencia inštanciou procesu stále kontrolovala - vytvoríme si timer.
Modifikujeme konštruktor pridaním týchto riadkov.

public ProcessManager(String process)
{
     _process = process;

     Timer timer = new Timer(10000);// vytvoření timeru s intervalem 10000 milisekund

     timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);// přidání eventu, který zavolá metodu timer_Elepsed při každém tzv. ticku (při každém dosažení zadaného intervalu)

     timer.Enabled = true;//spustíme timer

     this.killProcess();// a zavoláme metodu kill process aby při spuštění programu zkontrolovala běžící procesy ihned a nečekalo se na tick
}

Teraz je teda potrebné pridať onen event. Každý event obsahuje object sender (informácie o objekte, ktorý event vyvolal) a daný Event e.

private void timer_Elapsed(object sender, ElapsedEventArgs e)
{
     this.killProcess();
}

Môžeme si tiež nechať vypisovať koľkokrát už bol daný proces zabitý.
Pridáme premennú _count.

private int _count = 0;

A pod príkaz p.Kill () pridáme riadok s výpisom a inkrementácia.

Console.WriteLine(_process + " killed (" + ++_count + ")");

Pozn. ++ aj inkrementuje premennú pred použitím; i ++ umožní použiť premennú a potom ju inkrementuje.

Radšej prikladám celý zdrojový kód triedy:

class ProcessManager
{
    private String _process;
    private int _count = 0;

    public ProcessManager(String process)
    {
        _process = process;
        Timer timer = new Timer(10000);
        timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
        timer.Enabled = true;

        this.killProcess();
    }

    private void killProcess()
    {
        Process[] all = Process.GetProcessesByName(_process);

        foreach (Process p in all)
        {
            p.Kill();
            Console.WriteLine(_process + " killed (" + ++_count + ")");
        }
    }

    private void timer_Elapsed(object sender, ElapsedEventArgs e)
    {
        this.killProcess();
    }
}

No a teraz nezostáva než náš výtvor vyskúšať.

Jednoducho do metódy Main (v Program.cs) vytvoríme inštanciu tejto triedy s daným menom procesu.

static void Main(string[] args)
{
     new ProcessManager("wuauclt");
     Console.Read();
}

"Wuauclt" je názov procesu aktualizácií, toho ktorý otravne vyskakuje so žiadosťou o reštart a toho ktorý ma prinútil napísať si program a tento článok zaoberajúci sa jeho likvidáciou : D

Ovšem vy si zatiaľ program otestujte napríklad na "notepad".

Veľa úsmevu pri ďalších aktualizácií ;)


 

Všetky články v sekcii
C # - Pre pokročilých
Článok pre vás napísal David Jančík
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor je vášnivý programátor. Nezná slovo "nelze", nebojí se zkoušet nepoznané a pronikat do nových technologií.
Aktivity