我有一个应用程序,为一系列其他应用程序提供核心服务。
当启动另一个这样的应用程序时,我想检查服务应用程序是否正在运行,如果没有关闭。
检查其他应用程序是否存在的最佳方法是什么?我想我应该在服务应用程序中使用全局互斥锁并检查它是否存在于其他应用程序中。这是正确的方法吗?
答案 0 :(得分:3)
全球互斥方法很好,也是很多应用程序使用的方法。
例如,Windows Media Player就是这样做的。
相关问题:
Is using a Mutex to prevent multiple instances of the same program from running safe?
答案 1 :(得分: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
答案 2 :(得分:0)
是的 - 请小心你所谓的互斥锁。这些都有特定的命名准则 - this has some details
答案 3 :(得分:0)
我想说看一下你用来与服务应用程序通信的方法,看看通信失败行为是什么。如果您尝试随时与服务应用程序通信并且失败,则由于高依赖性,您似乎希望出现失败行为。如果您在第一次通信时失败,似乎您想要退出应用程序;但是你也要担心如果你的沟通在以后的某个时候失败会发生什么。
答案 4 :(得分: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