Single Instance Control Component

This article is on a single Instance control component which checks whether any instance of your application is running on the System. One can use this component in many ways like to check whether a particular application is running on the system or to avoid multiple instance of your application running on the system. There are many methods with which you can prevent multiple instances of your application like using complex Mutex class method or some unmanaged code. Here I have used simple Process class to check for the particular process is running or not.

Lets discuss first about InstanceControl component, InstanceControl Class is derived from Component class of .net frame work and this component  is having a method called IsAnyInstanceExist() which checks for a particular process running on the system and returns the status as true/false.

Namespace : InstConLib

Class: InstanceControl

Members:  1. InstanceControl() (Constructor which takes the process name)

      2. IsAnyInstanceExist() (Checks for the process and returns bool value)      

Brief Description about the component members:

1. The InstanceControl(string) is a constructor of the InstanceControl component. Constructor take single parameter string which is the process name and store it the member variable.

2. The IsAnyInstanceExist() method of InstanceControl component returns true/false by checking the Process running or not. This method uses Process class (alias System.Diagnostics.Process) GetProcessesByName() method which in turn returns the array of processes running with that name. 

using System;
using System.Diagnostics;
using System.ComponentModel;
namespace InstConLib 

/// <summary> 
/// InstanceControlLib Class controls the instance . 
/// </summary> 

public class InstanceControl: Component 

private string stProcName=null;
//constructor which holds the application name
public InstanceControl(string ProcName)
{
stProcName=ProcName;
}
public bool IsAnyInstanceExist()
{
//process class GetProcessesByName() checks for particular
//process is currently running and returns array of processes
//with that name

Process[] processes = Process.GetProcessesByName(stProcName);
if(processes.Length != 1) 
return false; //false no instance exist
else
return true; //true mean existance exist
}
} //end of class
} // end of namespace

Compile the above as component library to produce .dll file then one can call this component in different clients like WinForms, WebFroms or Console applications.I have used simple console application to use this component. 

The client program calls the InstanceControl component and uses its method. In this example I used to instance of component one which will check for the process that is not running and other which checks for the process which is running in the system.

Following is the code snippet  of the client application

//InstClient.cs

using System;
using InstConLib;
public class InstClient
{
public static void Main()
{

//First Object which looks for testApp.exe process 
//remember its not neccessary to give extention of process
InstConLib.InstanceControl in1 = new InstConLib.InstanceControl("testApp");
if(in1.IsAnyInstanceExist())
Console.WriteLine("Alreading one instance is running");
else
Console.WriteLine("No Instance running");
//Second Object which looks for Explorer.exe process 

//remember its not neccessary to give extention of process
InstConLib.InstanceControl in2 = new InstConLib.InstanceControl("Explorer");
if(in2.IsAnyInstanceExist())
Console.WriteLine("Alreading one instance is running");
else
Console.WriteLine("No Instance running");
}
}

OUTPUT:

D:\vstudio>InstClient
No Instance running
Alreading one instance is running

Further reading

.Net  More information on .Net technologies