WPF Использовать только один экземпляр приложения

Как разрешить запуск только одного экземпляра приложения WPF?

Спасибо.

Ответ 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

Посмотрите это решение: Разрешить выполнение только одного экземпляра приложения WPF

Это не только применяет один экземпляр приложения, но также дает фокус вашего текущего приложения, когда запускается дополнительный экземпляр приложения. Мое решение мьютекса для ограничения одного экземпляра фактически отличается от приведенной выше ссылки, но мне понравился элемент "focus" для этого решения.

Ответ 5

Пользователь sobelito связан этот пост, который имеет следующий update. В нем говорится, что для обновленного ресурса вы должны использовать Windows 7 Taskbar Single Instance, который, если вы посмотрите на источник, позволит вам сделать что вам нужно.

Вы можете использовать проект SingleInstance С#. Он также содержит образцы для WinForms и WPF.

Обратите внимание, что он также выпущен под лицензией Apache 2.0, в отличие от Post Arik Poznanski в блоге Microsoft, который (IANAL, AFAIK) не является коммерчески доступным.