В Java все находится в форме класса.
Если вы хотите использовать любой объект, тогда у вас есть две фазы:
Пример:
Object a;
a=new Object();
То же самое для концепции массива
Item i[]=new Item[5];
i[0]=new Item();
Если вы не дают секцию инициализации, тогда возникает NullpointerException
.
Это - способ сделать это с именем:
Process[] pname = Process.GetProcessesByName("notepad");
if (pname.Length == 0)
MessageBox.Show("nothing");
else
MessageBox.Show("run");
можно циклично выполнить весь процесс для получения идентификатора для более позднего управления:
Process[] processlist = Process.GetProcesses();
foreach(Process theprocess in processlist){
Console.WriteLine("Process: {0} ID: {1}", theprocess.ProcessName, theprocess.Id);
}
Это - самый простой способ, которым я нашел после использования отражателя. Я создал дополнительный метод для этого:
public static class ProcessExtensions
{
public static bool IsRunning(this Process process)
{
if (process == null)
throw new ArgumentNullException("process");
try
{
Process.GetProcessById(process.Id);
}
catch (ArgumentException)
{
return false;
}
return true;
}
}
Эти Process.GetProcessById(processId)
вызовы метода ProcessManager.IsProcessRunning(processId)
метод и броски ArgumentException
в случае, если процесс не существует. По некоторым причинам ProcessManager
класс является внутренним...
Синхронное решение:
void DisplayProcessStatus(Process process)
{
process.Refresh(); // Important
if(process.HasExited)
{
Console.WriteLine("Exited.");
}
else
{
Console.WriteLine("Running.");
}
}
Асинхронное решение:
void RegisterProcessExit(Process process)
{
// NOTE there will be a race condition with the caller here
// how to fix it is left as an exercise
process.Exited += process_Exited;
}
static void process_Exited(object sender, EventArgs e)
{
Console.WriteLine("Process has exited.");
}
Это зависит от того, как надежный Вы хотите, чтобы эта функция была. Если Вы хотите знать, работает ли конкретный экземпляр процесса, который Вы имеете все еще, и доступный с 100%-й точностью затем, Вам не повезло. Так как причина, это от управляемого процесса возражает, что существует только 2 способа определить процесс.
первым является идентификатор Процесса. К сожалению, идентификаторы процесса не уникальны и могут быть переработаны. Поиск списка процессов для идентификатора соответствия только скажет Вам, что существует процесс с тем же идентификационным выполнением, но это - не обязательно Ваш процесс.
второй объект является Дескриптором Процесса. Это имеет ту же проблему, хотя, поскольку идентификатор и это являются более неудобными работать с.
, Если Вы ищете среднюю надежность уровня, затем проверяющую список текущего процесса на процесс того же идентификатора, достаточно.
Process.GetProcesses()
способ пойти. Но Вы, возможно, должны использовать один или несколько различных критериев для нахождения процесса, в зависимости от того, как он работает (т.е. как услуга или нормальное приложение, имеет ли он строку заголовка).
Возможно (вероятно), я читаю вопрос неправильно, но являюсь Вами ищущий свойство HasExited, которое скажет Вам, что процесс, представленный Вашим объектом Процесса, вышел (или обычно или не).
, Если процесс у Вас есть ссылка на, имеет UI, который можно использовать свойство Responding, чтобы определить, отвечает ли UI в настоящее время на ввод данных пользователем или нет.
можно также установить EnableRaisingEvents и обработать событие Exited (который отправляется asychronously), или назовите WaitForExit (), если Вы хотите заблокироваться.