public static bool AlreadyRunning(string mutexName)
{
long runningId = 50000;
bool InstanceRunning = false;
Process proc = Process.GetCurrentProcess();
Process[] runningProcesses = Process.GetProcesses();
foreach (Process p in runningProcesses) {
if (p.Id != proc.Id) {
bool Created = false;
mutex = new Mutex(true, mutexName + p.Id.ToString(), out Created);
if (!Created) {
InstanceRunning = true;
runningId = p.Id;
break;
} else {
mutex.Close();
}
}
}
if (InstanceRunning) {
IntPtr hWnd = Process.GetProcessById((int)runningId).MainWindowHandle;
if (NativeMethods.IsIconic(hWnd)) {
NativeMethods.ShowWindowAsync(hWnd, 9);
}
NativeMethods.SetForegroundWindow(hWnd);
} else {
mutex = new Mutex(true, mutexName + proc.Id.ToString());
}
return InstanceRunning;
}