12
votes

Restreindre plusieurs instances d'une application

D'accord, j'ai créé mon application C #, créé un programme d'installation pour cela et le faire fonctionner sur ma machine.

Le problème est que lorsque l'utilisateur ouvre l'application EXE deux fois, il y aura deux instances de l'application en cours d'exécution. Je ne veux jamais qu'un seul cas de la demande soit en cours d'exécution à tout moment, comment puis-je faire cela?

Merci pour votre aide,


0 commentaires

4 Réponses :


9
votes

La technique commune pour cela est de créer un mutex et de vérifier sa présence sur la demande de démarrage de l'application.

voir Ce ou Ce .

code de DDJ: xxx


1 commentaires

S'il vous plaît afficher le code en réponse. Le premier lien était mort et d'autres peuvent éventuellement suivre de la poursuite.



0
votes

Je ne connais pas l'environnement dans lequel vous opérez, mais quelque chose à garder à l'esprit à propos des "applications à instance mono-instance" est la manière dont vous définissez une seule instance. Si l'application peut être exécutée sur plusieurs postes de travail simultanément, en utilisant une source de données courante, est-ce un problème? De même, qu'en est-il de la situation des services Terminal-Services (ou une situation «exécutée») où plusieurs utilisateurs sont connectés à la même ordinateur, souhaitez-vous restreindre l'application de manière à ce qu'un seul instance par utilisateur, par -ordinateur? Ou êtes-vous d'accord avec cela simplement un exemple par utilisateur?

La réponse à celles-ci pourrait vous amener dans une direction sur une autre. Par exemple, nous avons une application «instance unique» avec la portée étant un groupe d'ordinateurs. Un seul utilisateur est autorisé dans ce groupe de postes de travail. Nous avons réussi à cela par une table dans notre source de données partagée qui suivit les utilisateurs actuellement connectés. Il s'agit d'un problème de maintenance que vous devez être sûr que la table est précise à 100% tout le temps. Traitement des choses comme des pannes de courant inattendues sur le poste de travail, laissant des records «faux» dans ce tableau prenant une manipulation minutieuse.


0 commentaires


8
votes

J'ai résolu ce problème par ce

[STAThread]
 static void Main()
    {

        Process[] result = Process.GetProcessesByName("ApplicationName");
        if (result.Length > 1)
        {
            MessageBox.Show("There is already a instance running.", "Information");
            System.Environment.Exit(0);
        }
        // here normal start 
    }


1 commentaires

Si quelqu'un prend une copie de l'application dans un nom différent et commence comme un nouveau processus, il y aura plusieurs instances. Ainsi utilisez un ProcessObject.MainMoDule.FileInfo Description ou nom de fichier d'origine .. Cela ne change pas même si le fichier exécutable est renommé