To prevent user from running multiple instances of my application, I am using this code:-
 Process[] pArry = Process.GetProcesses();
           int nCount = 0;
           foreach (Process p in pArry)
           {
               string ProcessName = p.ProcessName;
               ProcessName = ProcessName.ToLower();
               if (ProcessName.CompareTo("myApp") == 0)
               {
                   nCount++;
               }
           }   
           if (nCount > 1)
           {
               MessageBox.Show(AppAlreadyRunning,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
               Process.GetCurrentProcess().Kill();
           }
But As we know, Process Name changes if change the exe name. So If user changes "myApp.exe" to "UserApp.exe", This patch won't work! Is there any way out?
I am using C# in VS2010. Thanks!
This is very simple process. Calling this function returns a process class with all the information you need.
Process.GetCurrentProcess()
Here is some code for you.
       Process[] pArry = Process.GetProcesses();
       foreach (Process p in pArry)
       {
           if (p.Id == Process.GetCurrentProcess().Id)
                continue;
           string ProcessName = p.ProcessName;
           if(ProcessName == Process.GetCurrentProcess().ProcessName)
           {
                MessageBox.Show(AppAlreadyRunning,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error)
                SetForegroundWindow(p.MainWindowHandle);
                Application.Exit();
           }
       }   
                        These questions seems quite similar...
https://stackoverflow.com/questions/93989/prevent-multiple-instances-of-a-given-app-in-net
https://stackoverflow.com/questions/229565/what-is-a-good-pattern-for-using-a-global-mutex-in-c/229567
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With