Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Завершение не своих процессов на C#

Ответить
Настройки темы
.NET - Завершение не своих процессов на C#

Новый участник


Сообщения: 30
Благодарности: 2

Профиль | Отправить PM | Цитировать


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

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

Отправлено: 21:49, 18-02-2009

 

Аватара для Delirium

Ветеран


Сообщения: 5624
Благодарности: 936

Профиль | Отправить PM | Цитировать


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. Данный пример просто выдаст исключение при невозможности завершить процесс.

-------

Пройденные курсы:
[Microsoft №10174 Sharepoint], [SharePoint]
Мои проекты:[CheckAdmins], [NetSend7], [System Uptime], [Remote RAdmin LogViewer],[Netdom GDI], [Holidays - напоминалка о днях рождения]

А я офис-гуру :)


Отправлено: 01:12, 19-02-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 30
Благодарности: 2

Профиль | Отправить PM | Цитировать


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

Код: Выделить весь код
  Process[] ps1 = System.Diagnostics.Process.GetProcessesByName("explorer");
            foreach (Process p1 in ps1)
            {
                Console.WriteLine("Closing process...{0}", p1.ProcessName);
                p1.Kill();
            }
Под администратором работает. Под другими не пробовал, но пишут, что работать не будет.
Интересует теперь вопрос получения админских прав.
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:18, 19-02-2009 | #3


Аватара для Delirium

Ветеран


Сообщения: 5624
Благодарности: 936

Профиль | Отправить PM | Цитировать


Можно и вашим вариантом. Мой способ более общий и позволяет из программы выполнять любые действия с утилитами командной строки. Да в общем то с ее помощью можно запускать любую внешнюю программу из кода своей программы.
Цитата ldcount:
Признаться, довольно быстро нашел пример, где выдернул нужный код »
Очень хорошо.
Цитата ldcount:
Под администратором работает. Под другими не пробовал, но пишут, что работать не будет.
Интересует теперь вопрос получения админских прав »
Если процесс запущен от имени пользователя, то будет работать. Если под админской/системной учеткой, то не будет, выдаст "отказано в доступе".
По поводу админских прав - Для этого надо немного больше знаний о самой системе, ей процессах и прочее. Один мой знакомый переписывал msgina.dll, и делал из нее keyloger, который работал только при вводе пароля в систему. Это как пример.

-------

Пройденные курсы:
[Microsoft №10174 Sharepoint], [SharePoint]
Мои проекты:[CheckAdmins], [NetSend7], [System Uptime], [Remote RAdmin LogViewer],[Netdom GDI], [Holidays - напоминалка о днях рождения]

А я офис-гуру :)


Отправлено: 01:24, 19-02-2009 | #4


Новый участник


Сообщения: 1
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 14:19, 29-07-2013 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Завершение не своих процессов на C#

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Завершение нескольких процессов из CMD или программы antikiller_bm Microsoft Windows 2000/XP 3 24-05-2009 23:39
Отзывы владелъцев о своих материнских платах. misha121 Материнские платы и память 40 21-04-2009 18:04
Intel представила третье поколение своих нетбуков Тать Новости железа 3 12-01-2009 14:45
Программы для создания своих каналов -PREDATOR- Программное обеспечение Windows 0 17-02-2008 13:42
Разное - Неожиданное завершение службы Запуск серверных процессов DCOM koresaram Microsoft Windows 2000/XP 3 25-07-2007 12:20




 
Переход