Activating a single application instance form

In a C # Windows Forms application, I want to determine if another instance of the application is running. If so, activate the main form of the executable instance and exit this instance.

What is the best way to achieve this?

+7
c # winforms
source share
4 answers

Scott Hanselman answers your question in detail.

+8
source share

Here is what I am doing now in the application's Program.cs file.

// Sets the window to be foreground [DllImport("User32")] private static extern int SetForegroundWindow(IntPtr hwnd); // Activate or minimize a window [DllImportAttribute("User32.DLL")] private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); private const int SW_RESTORE = 9; static void Main() { try { // If another instance is already running, activate it and exit Process currentProc = Process.GetCurrentProcess(); foreach (Process proc in Process.GetProcessesByName(currentProc.ProcessName)) { if (proc.Id != currentProc.Id) { ShowWindow(proc.MainWindowHandle, SW_RESTORE); SetForegroundWindow(proc.MainWindowHandle); return; // Exit application } } Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainForm()); } catch (Exception ex) { } } 
+4
source share

You can use this detection and activate your instance after it:

  // Detect existing instances string processName = Process.GetCurrentProcess().ProcessName; Process[] instances = Process.GetProcessesByName(processName); if (instances.Length > 1) { MessageBox.Show("Only one running instance of application is allowed"); Process.GetCurrentProcess().Kill(); return; } // End of detection 
+3
source share

Aku, this is a good resource. I answered a question similar to this one some time ago. You can check my answer here . Although this was for WPF, you can use the same logic in WinForms.

0
source share

All Articles