.NET - Завершение не своих процессов на C#

Ответить
 • Просмотры: 1
Аватара пользователя
ldcount

.NET - Завершение не своих процессов на C#

Сообщение ldcount »

Привет всем!

Стал заниматься программированием на C# и еще совсем не много знаю. На днях возник вопрос: «Как убивать (завершать) другие процессы из программы, написанной на С#?». К примеру при нажатии на кнопку, хочу, чтобы выключался explorer.exe.



Как это реализовать? Предполагаю, что здесь не обойтись без использования WIN32 API.

Быть может, у кого-то есть готовый кусок кода?
Аватара пользователя
Delirium

Re: .NET - Завершение не своих процессов на C#

Сообщение Delirium »

ldcount, вы хотите просто убивать процессы? По выбору? Можно просто использовать имеющиеся возможности консольной утилиты taskkill в самой программе

1. Пишем вот такую функцию:


читать дальше »




Код:

Код: Выделить всё

 private void ExecuteCommand(string str)
        {          
ProcessStartInfo startinfo;
            Process process = null;
            OperatingSystem os;
            string command;
            // Команда которую будет выполнять
            command = str;
            try
            {
                // Работаем только если это WinNT
                os = Environment.OSVersion;
                if (os.Platform != PlatformID.Win32NT)
                {
                    throw new PlatformNotSupportedException("Supported on Windows NT or later only");
                }
                os = null;
                // Проверка
                if (command == null || command.Trim().Length == 0)
                {
                    throw new ArgumentNullException("command");
                }
                startinfo = new ProcessStartInfo();
                    // Запускаем через cmd
                    startinfo.FileName = "cmd.exe";
                    // Ключ /c - выполнение команды
                    startinfo.Arguments = "/C " + command;
                // Не используем shellexecute
                startinfo.UseShellExecute = false;
                // Перенаправить вывод на обычную консоль
                startinfo.RedirectStandardOutput = true;
                // Не надо окон
                startinfo.CreateNoWindow = true;
                // Стартуем
                process = Process.Start(startinfo);
            }
            catch
            {
                throw;
            }
            finally
            {
                if (process != null)
                {
                    // Закрываем
                    process.Close();
                }
                // Освобождаем
                process = null;
                startinfo = null;
                GC.Collect();
            }
        }





Функция с параметром типа string, в качестве параметра передается текст команды, например "taskkill /F /IM explorer.exe /T", и запускается в невидимом режиме cmd.exe, которая и выполняет эту команду.



Далее просто в коде программы, где необходимо, формируем следующий текст:



Код:

Код: Выделить всё

try
{
string str = @" taskkill /F /M explorer.exe /T"; //перед taskkill обязателен пробел. 
ExecuteCommand(str);
}
catch(Exception msg_ex)
{
MessageBox.Show(msg_ex.Message);
}

Можно обойтись и без try...catch. Данный пример просто выдаст исключение при невозможности завершить процесс.
Аватара пользователя
ldcount

Re: .NET - Завершение не своих процессов на C#

Сообщение ldcount »

Delirium, спасибо за очень подробный ответ.

Я не заморачивался. Признаться, довольно быстро нашел пример, где выдернул нужный код.





Код:

Код: Выделить всё

  Process[] ps1 = System.Diagnostics.Process.GetProcessesByName("explorer");
            foreach (Process p1 in ps1)
            {
                Console.WriteLine("Closing process...{0}", p1.ProcessName);
                p1.Kill();
            }

Под администратором работает. Под другими не пробовал, но пишут, что работать не будет.

Интересует теперь вопрос получения админских правИзображение.
Аватара пользователя
Delirium

Re: .NET - Завершение не своих процессов на C#

Сообщение Delirium »

Можно и вашим вариантом. Мой способ более общий и позволяет из программы выполнять любые действия с утилитами командной строки. Да в общем то с ее помощью можно запускать любую внешнюю программу из кода своей программы.


Цитата ldcount:



Признаться, довольно быстро нашел пример, где выдернул нужный код
.NET - Завершение не своих процессов на C#




Очень хорошо.


Цитата ldcount:



Под администратором работает. Под другими не пробовал, но пишут, что работать не будет.

Интересует теперь вопрос получения админских прав
.NET - Завершение не своих процессов на C#




Если процесс запущен от имени пользователя, то будет работать. Если под админской/системной учеткой, то не будет, выдаст "отказано в доступе".

По поводу админских прав - Для этого надо немного больше знаний о самой системе, ей процессах и прочее. Один мой знакомый переписывал msgina.dll, и делал из нее keyloger, который работал только при вводе пароля в систему. Это как пример.
Аватара пользователя
express-rus

Re: .NET - Завершение не своих процессов на C#

Сообщение express-rus »

Delirium, почему-то ваш способ не работает. При выполнении кода ничего не происходит/процесс не завершается
Ответить

Вернуться в «Программирование и базы данных»