Можно ли использовать класс процесса, чтобы определить, запущен ли уже процесс? - PullRequest
0 голосов
/ 12 октября 2010

Я использую Класс процесса для запуска процессов, но никогда не хочу, чтобы выполнялось более одного экземпляра какой-либо программы.

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

Как лучше всего определить, запущен ли процесс?

Редактировать: Джон Фишер прав: это существующее приложение, которое я запускаю, и я не могу его изменить.

Ответы [ 3 ]

1 голос
/ 12 октября 2010

Полагаю, все зависит от того, что вы подразумеваете под «лучшим способом»? Вы имеете в виду самый быстрый, самый точный или тот, который будет справляться с некоторыми странными обстоятельствами?

Я бы начал с перечисления процессов и проверки имени исполняемого файла по сравнению с тем, которое я пытаюсь запустить. Если они совпадают (без учета регистра), это, вероятно, работает.

1 голос
/ 12 октября 2010

Вы можете вызвать этот метод

Process.GetProcesses()

и переберите результат (набор типа Process), чтобы увидеть, совпадает ли имя. Примерно так:

foreach (Process prc in Process.GetProcesses())
{
    if (prc.ProcessName.Contains(MyProcessName))
    {
        //Process is running
    }
}
0 голосов
/ 12 октября 2010

Для этого вы должны использовать шаблон приложения Singleton:

bool createdNew = true;
using (var mutex = new Mutex(true, "YourProcessName", out createdNew))
{
    if (createdNew)
    {
        // Run application
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...