Ouvrir une appli si elle ne l'est pas déjà.

Résolu
fred65200 Messages postés 100 Date d'inscription lundi 21 février 2005 Statut Membre Dernière intervention 18 février 2009 - 7 juil. 2005 à 09:31
fred65200 Messages postés 100 Date d'inscription lundi 21 février 2005 Statut Membre Dernière intervention 18 février 2009 - 7 juil. 2005 à 13:11
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

SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
7 juil. 2005 à 09:49
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
3
fred65200 Messages postés 100 Date d'inscription lundi 21 février 2005 Statut Membre Dernière intervention 18 février 2009
7 juil. 2005 à 09:51
Merci je verifie et te tiens au courant.
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
7 juil. 2005 à 09:56
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
0
Miiitch Messages postés 52 Date d'inscription jeudi 28 octobre 2004 Statut Membre Dernière intervention 24 août 2005 1
7 juil. 2005 à 09:57
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fred65200 Messages postés 100 Date d'inscription lundi 21 février 2005 Statut Membre Dernière intervention 18 février 2009
7 juil. 2005 à 10:04
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.
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
7 juil. 2005 à 10:04
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
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
7 juil. 2005 à 10:07
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
0
Miiitch Messages postés 52 Date d'inscription jeudi 28 octobre 2004 Statut Membre Dernière intervention 24 août 2005 1
7 juil. 2005 à 10:14
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
0
fred65200 Messages postés 100 Date d'inscription lundi 21 février 2005 Statut Membre Dernière intervention 18 février 2009
7 juil. 2005 à 13:02
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.
0
fred65200 Messages postés 100 Date d'inscription lundi 21 février 2005 Statut Membre Dernière intervention 18 février 2009
7 juil. 2005 à 13:08
il manque un P

Process[] RunningProcesses = process.GetProcessesByName("MonAppli");
0
fred65200 Messages postés 100 Date d'inscription lundi 21 février 2005 Statut Membre Dernière intervention 18 février 2009
7 juil. 2005 à 13:11
et bien sûr une reference
using System.Runtime.InteropServices;
0
Rejoignez-nous