61 votes

Comment vérifier si une autre instance de l'application est en cours d'exécution

Quelqu'un pourrait-il montrer comment il est possible de vérifier si une autre instance du programme (par exemple, test.exe) est en cours d'exécution et, dans l'affirmative, arrêter le chargement de l'application s'il existe une instance existante.

75voto

Patrik Points 5315

Vous n'êtes pas sûr de ce que vous entendez par « le programme », mais si vous souhaitez limiter votre application à une seule instance, vous pouvez utiliser un Mutex pour vous assurer que votre application n'est pas déjà en cours d'exécution.

 [STAThread]
static void Main()
{
    Mutex mutex = new System.Threading.Mutex(false, "MyUniqueMutexName");
    try
    {
        if (mutex.WaitOne(0, false))
        {
            // Run the application
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MainForm());
        }
        else
        {
            MessageBox.Show("An instance of the application is already running.");
        }
    }
    finally
    {
        if (mutex != null)
        {
            mutex.Close();
            mutex = null;
        }
    }
}

1voto

KeithS Points 36130

La classe statique Process a une méthode GetProcessesByName() que vous pouvez utiliser pour rechercher dans les processus en cours d'exécution. Recherchez simplement tout autre processus portant le même nom d'exécutable.

1voto

R Quijano Points 758

Tu peux essayer ça

 Process[] processes = Process.GetProcessesByName("processname");
foreach (Process p in processes)
{
    IntPtr pFoundWindow = p.MainWindowHandle;
    // Do something with the handle...
    //
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X