Empecher une applic. de se lancer 2 fois

Soyez le premier à donner votre avis sur cette source.

Snippet vu 25 409 fois - Téléchargée 27 fois

Contenu du snippet

Astuce bien connue de certains et moins d'autres programmeurs pour empêcher une application de se lancer deux fois, il suffit d'agir au niveau des processus.

On parcourt tout d'abord tous les processus actifs, on s'assure que l'ID du processus est bien différente de celle des programmes que l'on compare pour ne ne pas considérer l'application courante comme en doublon avec elle-même puis si le nom des processus est identique, il s'agit bel et bien d'un deuxième lancement.

Pour pouvoir manipuler ces processus, on fait tout d'abord référence à l'espace de noms Diagnostics.

Source / Exemple :


//******************
//En début de code
//******************
using System.Diagnostics;

//******************************************************
//Au chargement (Main() ou dans Form_Load() pour applic. Windows
//******************************************************
//Obtient le processus en cours de l'application
Process Proc_EnCours = Process.GetCurrentProcess();
//Collection des processus actuellement lancés
Process[] Les_Proc = Process.GetProcesses();
//Pour chaque processus lancé
foreach (Process Processus in Les_Proc)
	/*Il ne faut pas comparer par rapport à cette instance
		du programme mais une autre (grâce à l'ID)*/
	if (Proc_EnCours.Id != Processus.Id)
		//Si les ID sont différents mais de même nom ==> 2 fois le même programme
		if (Proc_EnCours.ProcessName == Processus.ProcessName)
		{
		MessageBox.Show("Le programme ne peut pas être lancé 2 fois!");
		this.Close();
		}

A voir également

Ajouter un commentaire Commentaires
cs_lolo818 Messages postés 22 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 27 janvier 2012
30 août 2010 à 09:01
Bonjour à tous, quelqu'un pourrait il m'aider a reformuler cette fonction pour mon application en C++, avec mes modifs mon appli ne se lance plus . je suis novice en programmation, Merci d'avance pour votre aide.
voila ou j'en suis:
Process^ Proc_EnCours = gcnew Process;
Proc_EnCours = Process::GetCurrentProcess();
array^Les_Proc = Process::GetProcesses();
for each (Process^ processus in Les_Proc);
if (Proc_EnCours->ProcessName == processus->ProcessName)
{MessageBox::Show("Le programme ne peut pas être lancé 2 fois!");
this->Close();
}
else
{
///////
}
cs_coq Messages postés 6351 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 100
12 août 2006 à 16:44
Salut,

Tu vas devoir passer par un mécanisme d'IPC (Interprocess Communications).
- Remoting
- message Windows "perso" que tu traites par un filtre ou la méthode WndProc (voir WM_APP, WM_USER)
- Data Copy (WM_COPYDATA)
- etc : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ipc/base/interprocess_communications.asp)

Bon courage :-)
cs_vladam Messages postés 216 Date d'inscription dimanche 13 janvier 2002 Statut Modérateur Dernière intervention 7 novembre 2009
12 août 2006 à 16:25
bonjour,
Je sais regarder si mon appli est déjà lancée, mais il manque quand même quelquechose dans vos sources :)
J'ai une application de type NOTEPAD mais en MDI. J'empêche donc que mon application démarre deux fois, mais .... dans le cas ou celle-ci est démarrée, je voudrais lui demander de charger le nouveau fichier TXT que j'envois dans le Args[]

Avez vous une solution pour lancer une procédure dans le process qui est déjà lancé ?

Amicalement,
bucherb Messages postés 412 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 13 août 2007
5 oct. 2005 à 15:49
string mutName = "87939A67-2893-470D-82EF-45A525BB31AB";

bool isNew = false;
Mutex mut = new Mutex(false, mutName,out isNew);

if (!isNew) return;

Application.Run(new Form1());
bucherb Messages postés 412 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 13 août 2007
5 oct. 2005 à 15:39
Les mutex c'est quand même mieux pour voir si l'appli est déjà démarrée.. Tu y fous un GUID, et t'as vraiment quasiment aucune chance que ça prenne un programme pour un autre.
Afficher les 15 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.