Comment ne lancer qu'une instance de mon programme...

0/5 (9 avis)

Snippet vu 13 229 fois - Téléchargée 36 fois

Contenu du snippet

Vérifier qu'il n'y a pas déja une instance de mon programmme qui s'éxécute
et s'arrêter si c'est le cas.

utilisation de la classe "Mutex".

Source / Exemple :


using System.Threading;
.......

// code mis dans Main d'une application windows form

static void Main() 
{
     bool OK;
     string moiID="UNE CHAINE QUELCONQUE ET UNIQUE";
     Mutex moi=new Mutex(true,moiID,out OK);
     if(OK)
     {
          Application.Run(new Form1());
          moi.ReleaseMutex();
     }
     else 
     {
          MessageBox.Show("Je tourne déja...");
     }
}

A voir également

Ajouter un commentaire Commentaires
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
18 déc. 2008 à 12:55
Tiens ????
8<-------- de Elektordi le 17/12/2004 20:13:05
Et si le programme plante ?
-------->8
8<-------- de sergebre le 18/12/2004 12:22:20
tu utilises un gestionnaire d'erreur, le blabla habituel.
try-catch-finally par exemple, au niveau de la création du mutex et au niveau de Application.Run(....).

c'est pas les exemples qui manque sur le site...
-------->8

Les mutex ne sont pas gérer par Windows directement ??? Si l'appli plante le mutex est détruit par Win donc pas besoin de gestion d'erreur (perso je n'est jamais utilisé la class mutex donc à testé mais les APIs ci dessous fonctionne sur ce principe ;) )

Déclaration pour VB6 :
Crée un Mutex
Private Declare Function CreateMutex Lib "kernel32" Alias "CreateMutexA" (ByVal lpMutexAttributes As Long, ByVal bInitialOwner As Long, ByVal lpName As String) As Long

Ouvre un mutex si il existe (retourne 0 si il n'existe pas ;))
Private Declare Function OpenMutex Lib "kernel32" Alias "OpenMutexA" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal lpName As String) As Long

Voila bonne prog

:) amicalement :)
Scaythe Messages postés 10 Date d'inscription mercredi 4 février 2004 Statut Membre Dernière intervention 4 juin 2010
29 août 2006 à 16:37
Principe du process : mauvais.
Pourquoi ne pourrais-je pas avoir plusieurs appli (différentes) ayant le même nom de process ?

Voici une solution qui semble bien :
http://www.csharpfr.com/codes/SEULE-INSTANCE-APPLICATION_36791.aspx
Utilise le principe de la classe mutex ...
ultima_93 Messages postés 46 Date d'inscription mercredi 19 mai 2004 Statut Membre Dernière intervention 26 juillet 2007
5 sept. 2005 à 16:59
exactement, moi je passe par les process,c'est beaucoup plus simple
#region Main
[STAThread]
static void Main()
{
try
{
Process proc = Process.GetCurrentProcess();
Process[] processes = Process.GetProcessesByName (proc.ProcessName);
if (processes.Length != 1)
return;
Application.Run(new From1());
}
catch()
}
{}
cs_Elektordi Messages postés 186 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 21 janvier 2008
18 déc. 2004 à 16:07
Je voulait dire que ce n'était pas la meuilleure solution car vérifier si un process du même nom tourne déjà est bcps plus fiable !
sergebre Messages postés 10 Date d'inscription vendredi 20 juin 2003 Statut Membre Dernière intervention 26 décembre 2003
18 déc. 2004 à 12:22
tu utilises un gestionnaire d'erreur, le blabla habituel.
try-catch-finally par exemple, au niveau de la création du mutex et au niveau de Application.Run(....).

c'est pas les exemples qui manque sur le site...
Afficher les 9 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.