Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

c#

.net

windows

wpf

Could someone show how it is possible to check whether another instance of the program (e.g. test.exe) is running and if so stop the application from loading if there is an existing instance of it.

like image 960
Tom Avatar asked Jun 17 '11 21:06

Tom


2 Answers

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.

like image 110
Vercas Avatar answered Sep 20 '22 02:09

Vercas


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;         }     } } 
like image 37
Patrik Svensson Avatar answered Sep 22 '22 02:09

Patrik Svensson