How to check if another instance of the application is running [duplicate] How to check if another instance of the application is running [duplicate] windows windows

How to check if another instance of the application is running [duplicate]


Want some serious code? Here it is.

var exists = System.Diagnostics.Process.GetProcessesByName(System.IO.Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location)).Count() > 1;

This works for any application (any name) and will become true if there is another instance running of the same application.

Edit: To fix your needs you can use either of these:

if (System.Diagnostics.Process.GetProcessesByName(System.IO.Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location)).Count() > 1) return;

from your Main method to quit the method... OR

if (System.Diagnostics.Process.GetProcessesByName(System.IO.Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location)).Count() > 1) System.Diagnostics.Process.GetCurrentProcess().Kill();

which will kill the currently loading process instantly.


You need to add a reference to System.Core.dll for the .Count() extension method. Alternatively, you can use the .Length property.


It's not sure what you mean with 'the program', but if you want to limit your application to one instance then you can use a Mutex to make sure that your application isn't already running.

[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;        }    }}


Here are some good sample applications. Below is one possible way.

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.}

Many other possible ways. See the examples for alternatives.

First one.

Second One.

Third One

EDIT 1: Just saw your comment that you have got a console application. That is discussed in the second sample.