Many times in developing Windows Forms and Web applications, we would wish that user need not open multiple instances of the applications and restrict to a single instance alone. Perhaps we end solving this problem by locking redundant code in each of the applications, we develop, which are designed at that time, exclusively for that purpose.
In this article, we would see how we can make an elegant use of System.Reflection namespace to detect whether an instance of an application is already running. Actually, I was in need of a similar situation for my web application and hence I was searching through various forums. I encountered this System.Reflection strategy in one of the premiere .NET forums, following which, I designed by cookie-centric strategy for Web Application.
Windows Forms Example
For a Windows Form application, we need to just add a simple static method in our application, which can examine all the processes running over the system and if the concerned application image name is found, it will inform the user and take an appropriate route, meaning, it would either warn the user of duplicate invocation of the program and proceed according to user intervention like WinZip or reuse existing instance like HTMLKit IDE. Perhaps you may use the following code snippet in your application.
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.
Replace("/", "\\") == current.MainModule.FileName)
//Return the other process instance.
//No other instance was found, return null.
At the start of the application, since this is a static method, you can use a simple if condition:
if (MainForm.RunningInstance() != null)
//Your application logic for duplicate
//instances would go here.
Windows Forms -- Solution 2
There is also one more cute solution, as one mav.northwind suggested in the forums. I just tested it with my demo and test application and it works fine. Perhaps, for the benefit of the reader, I am just trying to reproduce the code snippet of mav.northwind over here. Thank you mav.northwind!!!
private static Mutex s_Mutex;
and then use this in your Main() method:
s_Mutex = new Mutex(true, "YourMutexNameGoesHere");
MessageBox.Show("Another instance running");
Web Applications Example
I hope the above would really help .net Windows programmers and web application developers fraternity worldwide in resolving quite a common issue of detecting duplicate instances of the applications and handling them with ease.
No responses found. Be the first to comment...