Ouvrir une appli si elle ne l'est pas déjà. [Résolu]

Signaler
Messages postés
100
Date d'inscription
lundi 21 février 2005
Statut
Membre
Dernière intervention
18 février 2009
-
Messages postés
100
Date d'inscription
lundi 21 février 2005
Statut
Membre
Dernière intervention
18 février 2009
-
Bonjour à tous,



Existe t il une méthode pour ouvrir une application si elle n'est pas déjà ouverte.

L'appli que j'essaie d'ouvrir envoie un message d'erreur si elle est déjà ouverte et plante une fois sur fdeux.



Merci

11 réponses

Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
60
Hello,


Tu peux le vérifier en regardant la liste des Process, avec la méthode Process.GetProcessesByName par exemple.


Le seul petit problème, si tu es en terminal-serveur, ou si tu veux vérifier les process sur une machine distante, çq ne fonctionne pas avec le Framework 1.1. (Bug connu).


Ca devrait aller mieux avec le 2.0, mais je n'ai pas encore eu le temps de vérifier.

Amicalement, SharpMao
Messages postés
100
Date d'inscription
lundi 21 février 2005
Statut
Membre
Dernière intervention
18 février 2009

Merci je verifie et te tiens au courant.
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
44
Pourquoi ne pas faire une recherche pour voir si il n'y a rien qui traite de ca sur le site ?

http://www.csharpfr.com/code.aspx?ID=20698


Mx
Messages postés
52
Date d'inscription
jeudi 28 octobre 2004
Statut
Membre
Dernière intervention
24 août 2005
1
autre methode possible avec un mutex nommé : tu essayes d'ouvrir un
mutex nommé, si il n'existe pas tu le crées et tu lance ton appli.
sinon c'est que ton appli est déja lancée.

Miiitch
Messages postés
100
Date d'inscription
lundi 21 février 2005
Statut
Membre
Dernière intervention
18 février 2009

Merci à vous trois.
Pour trouver des codes source sur csharpfr, il faut avoir les mots clè,
J'avais cherché sur ce site mais pas ce code.

On y parle aussi de Mutex, je vais explorer, je ne sais pas ce que c'est.

Merci encore.
J'accepterai vos réponse tout à l'heure.
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
44
Problème avec le mutex nommé, il y a un risque que le nom de mutex soit utilisé par une autre application.

Faible, certes, mais il existe.

Avec la technique des process, plus de problème.

Mx
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
44
Je t'accorde que c'est pas toujours évident de savoir trouver ce qu'on cherche.

Enfin, c'est pas du tout un problème.



Mx
Messages postés
52
Date d'inscription
jeudi 28 octobre 2004
Statut
Membre
Dernière intervention
24 août 2005
1
un truc important aussi, c'est qu'avec windows XP, il peut y avoir
plusieurs utilisateurs qui utilise ton application en meme temps, ca
serait bete de ne pas pouvoir l'ouvrir si elle est déja utilisée mais
par un autre utilisateur

Miiitch
Messages postés
100
Date d'inscription
lundi 21 février 2005
Statut
Membre
Dernière intervention
18 février 2009

Bon j'en suis là et ça marche. Si l'appli est ouverte je la met au premier plan.

private const int SW_MINIMIZE = 6;
private const int SW_RESTORE = 9;
//Je me suis battu pour savoir quelles constantes il fallait utiliser
//suivant que l'appli est derrière une fenêtre ou dans la barre des tâche

private void button1_Click(object sender, EventArgs e)
{
Process[] RunningProcesses = rocess.GetProcessesByName("MonAppli");
//MonAppli est le nom de l'exe sans .exe
if (RunningProcesses.Length != 1)
{
Process.Start(@"Chemin complet de l'appli");
}
else
{
ShowWindowAsync(RunningProcesses[0].MainWindowHandle,SW_SHOWMINIMIZED);
ShowWindowAsync(RunningProcesses[0].MainWindowHandle, SW_RESTORE);
}
}
[DllImport("User32.dll")]
public static extern int ShowWindowAsync(IntPtr hWnd, int nCmdShow);

merci à vous trois. Le Mutex pour moi c'est pour plus tard.

N'hésitez pas à poster des commentaires pour amélioration.

PS je vais ajouter ce bout de code aux commentaire du lien de MX.
Messages postés
100
Date d'inscription
lundi 21 février 2005
Statut
Membre
Dernière intervention
18 février 2009

il manque un P

Process[] RunningProcesses = process.GetProcessesByName("MonAppli");
Messages postés
100
Date d'inscription
lundi 21 février 2005
Statut
Membre
Dernière intervention
18 février 2009

et bien sûr une reference
using System.Runtime.InteropServices;