Program nadzorujący inny program

0

Chodzi o to żeby zrobić program, który będzie sprawdzał czy inny program (proces) jest włączony.W momencie jego wyłączenie powinien wyłączać komputer. Wyłączanie powinno być jak najszybsze (kiedyś używałem shutdown, gdzieś to znalazłem ale efekt jest taki że wyłącza po minucie - pokazuje komunikat że za 1 min wyłączy kompa i tak robi a ja chce żeby od razu zamykał). Jak możecie to wrzućcie jakieś propozycje kodu. Dzięki z góry :)

0
using System;
using System.Diagnostics;
using System.Threading;

namespace ProcessTest
{
    class Program
    {
        static void Main(string[] args)
        {
            while (true)
            {
                //jeśli zostanie uruchomiony notatnik
                Process[] procesy = Process.GetProcessesByName("notepad");
                foreach (Process p in procesy)
                    //to uruchom kalkulator
                    Process.Start("calc.exe");
                //czekaj chwilkę
                Thread.Sleep(1);
            }
        }
    }
}

A shutdown się używa tak:
shutdown -s -f -t 0

0

Jeżeli zależy ci na wydajności, sprawności i szybkości tego rozwiązania po pierwsze zrezygnuj z C#. Po drugie albo napisz sterownik, który zhookuje ZwTerminateProcess albo DLL z hookiem NtTerminateProcess (to drugie w UserMode).

0

@Rev.pl - a gdzie tu jest miejsce na wydajność? ;>

0

W programie, który będzie najprawdopodobniej uruchomiony przez cały czas? Wykonywanie takich operacji co jedną milisekundę? Nie żartuj ;).

0

Nie żartuję. To jest akurat prosty przykład, więc użyłem takiej pętli - powinno się rzecz jasna użyć jakiegoś Timera, częstotliwość milisekundowa nie jest potrzebna. Nie żartuj, że nie wiesz o co chodziło w moim kodzie ;)

0

Po co z taką pollingową armatą na coś takiego? Ja proponuję coś takiego:

Process[] ps = Process.GetProcessesByName("notepad");
            foreach (Process p in ps)
            {
                p.WaitForExit();
            }

1 użytkowników online, w tym zalogowanych: 0, gości: 1