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.
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
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
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.