2009-05-11 2 views
0

У меня есть приложение, которое предоставляет основные услуги для ряда других приложений..NET Проверьте, работает ли другое приложение

Когда запускается другое из этих приложений, я хочу проверить, что приложение-служба запущено и если оно не завершено.

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

ответ

3
bool IsApplicationAlreadyRunning() 
{ 
string proc=Process.GetCurrentProcess().ProcessName; 
Process[] processes=Process.GetProcessesByName(proc); 
if (processes.Length > 1) 
return true; 
else 
return false; 
} 

Источник: http://kseesharp.blogspot.com/2008/11/c-check-if-application-is-already.html

+0

Мьютекс является лучшим подходом. Использование имени процесса может потенциально потерпеть неудачу, если несколько процессов имеют одно и то же имя, что маловероятно. –

+0

Этот подход работает для меня, но если работает только экземпляр приложения, то условие if должно быть изменено как будто (process.length> 0 – MatVAD

0

Да-только будьте осторожны, что вы называете мьютекс. Для них есть конкретные рекомендации по именованию: this has some details

0

Я бы сказал, чтобы изучить метод, который вы используете для связи с сервисным приложением, и посмотреть, что такое ошибка связи. Если вы попытаетесь связаться с сервисным приложением в любое время и сработали, похоже, что вы хотите иметь поведение с ошибкой из-за высокой зависимости. Если у вас есть сбой при первом обращении, кажется, что вы хотите выйти из приложения; но вам также нужно беспокоиться о том, что произойдет, если ваше сообщение не удастся и в более поздний момент.

0

попробовать следующее (VB.NET пример):

 If PrevInstance() Then 
      MsgBox("[MyApplicationName] application is already running.") 
      Exit Sub 
     End If 


Function PrevInstance() As Boolean 
    If UBound(Diagnostics.Process.GetProcessesByName(Diagnostics.Process.GetCurrentProcess.ProcessName)) > 0 Then 
     'MsgBox("Application is still running", MsgBoxStyle.Information) 
     Return True 
    Else 
     Return False 
    End If 
End Function 
Смежные вопросы