2009-01-05 28 views

Respuesta

15

Pruebe esto: Single instance application. He usado el segundo método y funciona bien.

+1

el segundo método es el mejor que he encontrado. simplemente supere el hecho de que usa Microsoft.VisualBasic DLL y hace todo lo demás que necesita, incluido el uso adecuado de .NET remoto (no hay sockets o mutexes para crear uno mismo). pero lo mejor de todo es que facilita la transferencia de parámetros a la aplicación que ya se está ejecutando, o simplemente llevarlo al frente cuando intentas volver a abrirlo –

29

http://blogs.microsoft.co.il/blogs/arik/archive/2010/05/28/wpf-single-instance-application.aspx

No requiere VB.DLL como algunos otros ejemplos aconsejan. Tiene código de muestra WPF. Pasa cualquier argumento de línea de cmd a la instancia inicial.

+2

Me gusta mucho este método, te permite hacer cosas como activar una ventana minimizada si el el usuario intenta ejecutar el programa nuevamente. – Andy

+0

Esto se encuentra en una [licencia] de blog de Microsoft no comercial (https://www.microsoft.com/en-us/legal/intellectualproperty/copyright/default.aspx). El recurso ha sido lanzado en msdn con una licencia diferente. Ver mi respuesta en este hilo. –

0

Salida esta solución: Allowing only one instance of a WPF application to execute

Esto no sólo hace cumplir una instancia de una aplicación, sino que también da su enfoque actual de la aplicación cuando se corrió una instancia adicional de una aplicación. Mi solución mutex para restringir una instancia es realmente diferente del enlace anterior, pero me gustó el elemento "foco" para esta solución.

2

que utilizan este método de ayuda y lo llaman desde el evento 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 
0

usuario sobelito ligado this post, que tiene la siguiente update. Lo que dice es que para un recurso actualizado, debe usar Windows 7 Taskbar Single Instance, que si examina la fuente le permitirá hacer lo que necesita.

Puede usar el proyecto SingleInstance C#. También contiene muestras para WinForms y WPF.

Tenga en cuenta que también se lanzó bajo la licencia de Apache 2.0, a diferencia de la publicación de Poznanski de Arik en el Blog de Microsoft, que es (IANAL, AFAIK) no disponible comercialmente.

Cuestiones relacionadas