Voici quelques exemples d'applications. Voici une façon possible.
public static Process RunningInstance()
{
Process current = Process.GetCurrentProcess();
Process[] processes = Process.GetProcessesByName (current.ProcessName);
//Loop through the running processes in with the same name
foreach (Process process in processes)
{
//Ignore the current process
if (process.Id != current.Id)
{
//Make sure that the process is running from the exe file.
if (Assembly.GetExecutingAssembly().Location.
Replace("/", "\\") == current.MainModule.FileName)
{
//Return the other process instance.
return process;
}
}
}
//No other instance was found, return null.
return null;
}
if (MainForm.RunningInstance() != null)
{
MessageBox.Show("Duplicate Instance");
//TODO:
//Your application logic for duplicate
//instances would go here.
}
De nombreuses autres façons. Voir les exemples pour des alternatives.
First one.
Second One.
Third One
Vous devez spécifier si vous voulez une instance par bureau, par utilisateur connecté, par ordinateur, ... Il est courant que les programmes choisissent « par ordinateur » lorsque l'un des d'autres choix est plus approprié. – CodesInChaos
Voir http://stackoverflow.com/questions/2988960/how-to-make-application-singleton – ChrisF
"son autre instance ne sort pas au moment de l'exécution" que voulez-vous dire par là? Le seul moyen que je connaisse est que le programme nouvellement démarré vérifie d'une certaine manière s'il existe déjà une instance et quitte ensuite (généralement après avoir activé l'ancienne instance et peut-être lui avoir envoyé des messages). – CodesInChaos