Dans .NET, quel est le meilleur moyen d'empêcher plusieurs instances d'une application de s'exécuter en même temps? Et s'il n'y a pas de «meilleure» technique, quelles sont certaines des mises en garde à prendre en compte avec chaque solution?
123
string appGuid = ((GuidAttribute)Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(GuidAttribute), true)[0]).Value;
qui obtiendra le guide de l'assembly en cours d'exécutionla source
Voici le code dont vous avez besoin pour vous assurer qu'une seule instance est en cours d'exécution. C'est la méthode d'utilisation d'un mutex nommé.
la source
Hanselman a publié un article sur l'utilisation de la classe WinFormsApplicationBase de l'assembly Microsoft.VisualBasic pour ce faire.
la source
Il semble que 3 techniques fondamentales ont été suggérées jusqu'à présent.
Des mises en garde que j'ai manquées?
la source
1 - Créer une référence dans program.cs ->
2 - Mettre en
void Main()
première ligne de code ->C'est tout.
la source
Mutex
? Y a-t-il un hic?À l'aide de Visual Studio 2005 ou 2008, lorsque vous créez un projet pour un exécutable, dans les fenêtres de propriétés du panneau "Application", il y a une case à cocher intitulée "Créer une application d'instance unique" que vous pouvez activer pour convertir l'application sur une application à instance unique .
Voici une capture de la fenêtre dont je parle: Il s'agit d'un projet d'application Windows Visual Studio 2008.
la source
J'ai essayé toutes les solutions ici et rien n'a fonctionné dans mon projet C # .net 4.0. En espérant aider quelqu'un ici la solution qui a fonctionné pour moi:
En tant que variables de classe principales:
Lorsque vous devez vérifier si l'application est déjà en cours d'exécution:
J'avais besoin de fermer d'autres istances uniquement avec certaines conditions, cela a bien fonctionné pour mon objectif
la source
http://en.csharp-online.net/Application_Architecture_in_Windows_Forms_2.0 —Single-Instance_Detection_and_Management
la source
Après avoir essayé plusieurs solutions, je pose la question. J'ai fini par utiliser l'exemple pour WPF ici: http://www.c-sharpcorner.com/UploadFile/f9f215/how-to-restrict-the-application-to-just-one-instance/
Dans App.xaml:
la source
Cet article explique simplement comment vous pouvez créer une application Windows avec un contrôle sur le nombre de ses instances ou exécuter une seule instance. Il s'agit d'un besoin très typique d'une application métier. Il existe déjà de nombreuses autres solutions possibles pour contrôler cela.
http://www.openwinforms.com/single_instance_application.html
la source
Utilisez VB.NET! Pas vraiment ;)
en utilisant Microsoft.VisualBasic.ApplicationServices;
Le WindowsFormsApplicationBase de VB.Net vous fournit une propriété "SingleInstace", qui détermine d'autres instances et ne laisse qu'une seule instance s'exécuter.
la source
Ceci est le code pour VB.Net
Ceci est le code pour C #
la source
http://www.codeproject.com/KB/cs/SingleInstancingWithIpc.aspx
la source
Vous devez utiliser System.Diagnostics.Process.
Consultez: http://www.devx.com/tips/Tip/20044
la source
(Remarque: c'est une solution amusante! Cela fonctionne mais utilise une mauvaise conception GDI + pour y parvenir.)
Mettez une image avec votre application et chargez-la au démarrage. Maintenez-le enfoncé jusqu'à ce que l'application se ferme. L'utilisateur ne pourra pas démarrer une deuxième instance. (Bien sûr, la solution mutex est beaucoup plus propre)
la source
Main()
méthode qui va à l'encontre de la façon dont WPF est censé fonctionner.De: Assurer une seule instance de l'application .NET
et: Mutex d'application à instance unique
Même réponse que @Smink et @Imjustpondering avec une torsion:
FAQ de Jon Skeet sur C # pour découvrir pourquoi GC.KeepAlive est important
la source
En utilisant simplement un
StreamWriter
, que diriez-vous de cela?et
la source
Normalement, cela est fait avec un Mutex nommé (utilisez le nouveau Mutex ("votre nom d'application", true) et vérifiez la valeur de retour), mais il existe également des classes de support dans Microsoft.VisualBasic.dll qui peuvent le faire pour vous .
la source
Cela a fonctionné pour moi en pur C #. le try / catch se produit lorsqu'un processus de la liste se termine pendant votre boucle.
la source
Veillez à prendre en compte la sécurité lors de la restriction d'une application à une seule instance:
Article complet: https://blogs.msdn.microsoft.com/oldnewthing/20060620-13/?p=30813
...
...
Essayez de définir un DACL sur votre mutex, voici la méthode .NET: https://msdn.microsoft.com/en-us/library/system.security.accesscontrol.mutexsecurity(v=vs.110).aspx
la source
Aucune de ces réponses n'a fonctionné pour moi car j'avais besoin de cela pour fonctionner sous Linux en utilisant monodevelop. Cela fonctionne très bien pour moi:
Appelez cette méthode en lui passant un identifiant unique
la source