Wyłączanie procesu w C#


(Krzychoster) #1

Witam,

mam jedno pytanie. Jak w C# wyłączyć jakiś proces zachodzący w systemie, np. gg.exe? Jeśli ktoś może podać kod do tego, to proszę o podanie.

Pozdrawiam.


(Ryan) #2

Zabijanie procesów po nazwie to nieszczególnie dobry pomysł. Jeśli jednak musisz, to:

using System;

using System.Diagnostics;

using System.ComponentModel;

...

{

  Process [] Notepads = Process.GetProcessesByName("notepad");

  foreach (Process CurrentNotepad in Notepads)

  {

    CurrentNotepad.Kill();

  }

}

GetProcessesByName i Kill mogą rzucać wyjątkami. Możliwość listowania procesów i zabijania oraz ewentualne wyjątki zależą od a) systemu operacyjnego b) tokenu procesu/wątku Twojego programu c) deskryptora bezpieczeństwa procesu który chcesz zabić d) sesji Twojego programu e) sesji programu który chcesz ubić.


(Max 11) #3

Hej,

Wiem, że odświeżam kotleta, ale piszę prosty z pozoru projekt i nie wiem jak mam rozwiązać problem.

Potrzebuję zrobić aplikację Klient - Serwer, która będzie zamykała komputer Klient :wink:

Mam zestawione połączenie,

Mam sposób na wyłączanie, - zabijam Twoim sposobem svchost.exe i komp się drastycznie wyłącza.

Pytanie moje teraz takie, jak mogę przesłać ten parametr zdalnie ?

Taką mam klasę połączeń

class DanePolaczenia

        {           

            public TcpClient server;

            public string Polacz(string adress, int port)

            {

                try

                {

                    server = new TcpClient(adress, port);

                    return "Połączono";                   

                }


                catch (SocketException)

                {   

                  return "Nie można nawiązać połączenia";     

                }

Tak się łączę

private void connect_button_Click(object sender, EventArgs e)

        {

            string komunikat_komp1, komunikat_komp2;            

            DanePolaczenia Polaczenie = new DanePolaczenia();           

           komunikat_komp1 = Polaczenie.Polacz("127.0.0.1", 9050);           

            connect1.Text = komunikat_komp1;

A tak odbieram połączenie ...

class SimpleTcpSrvr

{

    public static void Main()

    {

        int recv;

        byte[] data = new byte[1024];


        TcpListener serwer = new TcpListener(9050);

        serwer.Start();

        Console.WriteLine("...Oczekiwanie na połączenie...");

        TcpClient client = serwer.AcceptTcpClient();

        NetworkStream ns = client.GetStream();


        IPEndPoint clientep = (IPEndPoint)client.Client.RemoteEndPoint;

        Console.WriteLine("Połączono na adresie IP {0} i porcie {1}", clientep.Address, clientep.Port);

        string message = "Zalogowano";


        data = Encoding.ASCII.GetBytes(message);

        ns.Write(data, 0, data.Length);


        while (true)

        {

            data = new byte[1024];

            recv = ns.Read(data, 0, data.Length);

            if (recv == 0)

                break;

            Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));



            message = "Thank";


            ns.Write(Encoding.ASCII.GetBytes(message), 0, message.Length);

        }

        Console.WriteLine("Rozłączono z numerem IP {0}", clientep.Address);

        client.Close();

        serwer.Stop();

        Console.ReadLine();

    }

}

Jak to spiąć ze sobą, żeby przy zastosowaniu przycisku a Kliencie -> serwer zgasł :wink: jak wspomniałem przy użyciu zabijania svchost :wink:


(Anoonyymoous) #4

Nie lepiej jest uruchomić proces shutdown /s?? :slight_smile:

Process.Start("shutdown /s");

Pozdrawiam.