2009-01-05 3 views

Répondre

15

Essayez ceci: Single instance application. J'ai utilisé la deuxième méthode et cela fonctionne très bien.

+1

La deuxième méthode est la meilleure que j'ai trouvée. Il suffit de passer en revue le fait qu'il utilise Microsoft.VisualBasic DLL et qu'il fait tout ce dont vous avez besoin - y compris l'utilisation correcte du remoting .NET (pas de sockets ou de mutex pour créer vous-même). mais surtout, il est facile de passer des paramètres à l'application déjà en cours, ou simplement de la mettre en avant quand vous essayez de la rouvrir –

29

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

Ne nécessite pas VB.DLL que d'autres exemples conseillent. A l'exemple de code WPF. Transmet tous les arguments de ligne cmd à l'instance initiale.

+2

J'aime vraiment cette méthode, elle vous permet de faire des choses comme activer une fenêtre réduite si L'utilisateur essaie de réexécuter le programme. – Andy

+0

Ceci est sous un blog Microsoft non commercial [licence] (https://www.microsoft.com/fr-fr/legal/intellectualproperty/copyright/default.aspx). La ressource a été publiée dans msdn avec une licence différente. Voir ma réponse sur ce fil. –

0

Découvrez cette solution: Allowing only one instance of a WPF application to execute

Ceci impose non seulement une instance d'une application, mais il donne également votre attention de l'application actuelle lorsqu'une instance supplémentaire d'une demande est couru. Ma solution de mutex pour restreindre une instance est en fait différente du lien ci-dessus, mais j'ai aimé l'élément «focus» de cette solution.

2

J'utilise cette méthode d'assistance et de l'appeler de l'événement 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

utilisateur sobelito lié this poste, qui a la update suivante. Ce qu'il dit est que pour une ressource mise à jour, vous devez utiliser Windows 7 Taskbar Single Instance, qui si vous regardez dans la source vous permettra de faire ce dont vous avez besoin.

Vous pouvez utiliser le projet C# SingleInstance. Il contient également des échantillons pour WinForms et WPF. Notez qu'il est également publié sous la licence Apache 2.0, contrairement à la publication Poznanski d'Arik dans le blog Microsoft, qui est (IANAL, AFAIK) pas disponible dans le commerce.

Questions connexes