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 仅强制一个应用程序实例的主要内容,如果未能解决你的问题,请参考以下文章

如何强制 C# .net 应用程序在 Windows 中仅运行一个实例? [复制]

WPF 从其他线程访问 GUI

应用引擎。强制单实例

强制 WPF 工具提示留在屏幕上

如何强制 WPF 应用程序以管理员模式运行

强制终止 WPF 应用程序 [重复]