【发布时间】:2009-05-11 13:51:07
【问题描述】:
我有一个应用程序,它为一系列其他应用程序提供核心服务。
当这些应用程序中的另一个启动时,我想检查服务应用程序是否正在运行,如果没有关闭。
检查其他应用是否存在的最佳方法是什么?我在想我应该在服务应用程序中使用全局互斥锁并检查它在其他应用程序中是否存在。这是正确的方法吗?
【问题讨论】:
标签: vb.net
我有一个应用程序,它为一系列其他应用程序提供核心服务。
当这些应用程序中的另一个启动时,我想检查服务应用程序是否正在运行,如果没有关闭。
检查其他应用是否存在的最佳方法是什么?我在想我应该在服务应用程序中使用全局互斥锁并检查它在其他应用程序中是否存在。这是正确的方法吗?
【问题讨论】:
标签: vb.net
全局互斥锁方法很好,很多应用都在使用。
例如,Windows Media Player 就是这样做的。
相关问题:
Is using a Mutex to prevent multiple instances of the same program from running safe?
【讨论】:
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
【讨论】:
是的 - 请注意您所说的互斥锁。这些有特定的命名准则-this has some details
【讨论】:
我会说查看您用于与服务应用程序通信的方法,并查看通信失败行为是什么。如果您在任何时候尝试与服务应用程序通信并失败,由于高度依赖,您似乎想要有失败行为。如果第一次通信失败,好像要退出应用程序;但是您也必须担心如果您以后的通信失败会发生什么。
【讨论】:
尝试以下(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
【讨论】: