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í