WPF 仅强制一个应用程序实例
Posted
技术标签:
【中文标题】WPF 仅强制一个应用程序实例【英文标题】:WPF Enforce only ONE instance of application 【发布时间】:2010-09-29 16:51:22 【问题描述】:如何只允许 WPF 应用程序的一个实例运行?
谢谢。
【问题讨论】:
***.com/questions/19147/… 【参考方案1】:试试这个:Single instance application。我用了第二种方法,效果很好。
【讨论】:
第二种方法是我找到的最好的方法。只需克服它使用 Microsoft.VisualBasic DLL 的事实,它会完成您需要的一切 - 包括正确使用 .NET 远程处理(无需自己创建套接字或互斥锁)。但最重要的是,它可以轻松地将参数传递给已经运行的应用程序,或者在您尝试重新打开它时将其置于最前面 链接断开 - 请更新 @rayzinnz 应该不错【参考方案2】:用户sobelito
链接this 帖子,其中包含以下update。它的意思是,对于更新的资源,您应该使用Windows 7 Taskbar Single Instance,如果您查看源代码,您可以做您需要的事情。
您可以使用SingleInstance
c# 项目。它还包含 WinForms 和 WPF 的示例。
请注意,它也是在 Apache 2.0 许可下发布的,这与 Arik 在 Microsoft 博客中的 Poznanski 帖子不同,后者 (IANAL, AFAIK) 尚未商业化。
【讨论】:
【参考方案3】:我使用这个辅助方法并从 application.startup 事件中调用它
Public Sub ForceSingleInstanceApplication()
'Get a reference to the current process
Dim MyProc As Process = Process.GetCurrentProcess
'Check how many processes have the same name as the current process
If (Process.GetProcessesByName(MyProc.ProcessName).Length > 1) Then
'If there is more than one, it is already running
MsgBox("Application is already running", MsgBoxStyle.Critical, My.Application.Info.Title) 'Reflection.Assembly.GetCallingAssembly().GetName().Name)
' Terminate this process and give the operating system the specified exit code.
Environment.Exit(-2)
Exit Sub
End If
End Sub
【讨论】:
【参考方案4】:查看此解决方案:Allowing only one instance of a WPF application to execute
这不仅会强制执行应用程序的一个实例,而且还会在运行其他应用程序实例时为您当前的应用程序提供焦点。我限制一个实例的互斥锁解决方案实际上与上面的链接不同,但我喜欢这个解决方案的“焦点”元素。
【讨论】:
【参考方案5】:http://blogs.microsoft.co.il/blogs/arik/archive/2010/05/28/wpf-single-instance-application.aspx
不像其他一些例子所建议的那样需要 VB.DLL。 有 WPF 示例代码。 将任何 cmd 行参数传递给初始实例。
【讨论】:
我真的很喜欢这种方法,如果用户再次尝试运行程序,它可以让您执行诸如激活最小化窗口之类的操作。 这是一个非商业的微软博客license。该资源已在 msdn 中以不同的许可证发布。请参阅我在此线程上的答案。以上是关于WPF 仅强制一个应用程序实例的主要内容,如果未能解决你的问题,请参考以下文章