Войти

Показать полную графическую версию : C# - Как отследить состояние процесса


Flammable
15-02-2010, 00:03
Нужно проверить, запущен ли процесс и узнать его состояние - отвечает/не отвечает. Как реализовать такое на C# ?

Delirium
15-02-2010, 02:24
Процесс сторонний или запущенный из под программы?
Почитайте это: http://www.gotdotnet.ru/forums/15/114038/538210/

В частности, вас должен заинтересовать вот такой код:

private void goToProcess()
{
Process[] processList;
processList = Process.GetProcessesByName("cmd");
foreach (Process myProcess in processList)
{
progressBar1.Style = ProgressBarStyle.Marquee; //Вместо этой строки можно сделать проверку свойств myProcess.
}
}
Для объявления Process Надо добавить директиву #using System.Diagnostics

Flammable
15-02-2010, 08:21
Процесс сторонний. Причем возможно, что имя процесса, который нужно отслеживать, будет совпадать с именем другого процесса. Различаются они по описанию. Можно ли идентифицировать нужный процесс по имени и описанию?

Delirium
15-02-2010, 09:14
Process.GetProcessesByName("cmd"); »
Это уже идентификация процесса командной строки (cmd.exe). Не совсем понятно, что имеется в виду под описанием?

Если имеется в виду описание свойств(правой кнопкой на файле - свойства), то можно почитать здесь:
http://www.gotdotnet.ru/forums/2/76926/366479/
и здесь: http://otvety.google.ru/otvety/thread?tid=6c768343d0014435

Путь до имени файла можно выковырять через вышеуказанный код и свойства MyProcess.

Flammable
15-02-2010, 18:48
Не совсем понятно, что имеется в виду под описанием? »
В диспетчере задач имеется колонка "Описание". По ней и нужно идентифицировать процесс.
Хотя есть и альтернативный вариант - идентифицировать процесс по пути к исполняемому файлу. Это возможно?
-----------
Попробую более очевидно описать задачу.
Есть 2 программы, размещенные в разных каталогах. Имена одинаковые, версии и описания разные.
К примеру,

C:\bin\app.exe //Описание: ConApp1
C:\bin2\app.exe //Описание: ConApp2

Обе программы запущены. C:\bin2\app.exe зависает (или перестает отвечать, как пишет Windows в заголовке окна). В этот момент нужно его завершить (C:\bin2\app.exe), не затронув первую программу (C:\bin\app.exe).

Delirium
16-02-2010, 01:39
Хотя есть и альтернативный вариант - идентифицировать процесс по пути к исполняемому файлу. Это возможно? »
http://www.cyberforum.ru/csharp-net/thread4966.html - здесь все описано подробно.

Flammable
16-02-2010, 08:04
Delirium, спасибо, попробую.

unsektor
31-12-2010, 11:55
private void goToProcess()
{
string ProcessName = "cmd";
SomeProcess = Process.GetProcessesByName(ProcessName);
if (SomeProcess.Length == 0){Console.WriteLine("{0} is offline", ProcessName);}else{Console.WriteLine("{0} is online", ProcessName);}
}
Попробуйте вот так.




© OSzone.net 2001-2012