- 通常,使用有名互斥体(named mutex).但是该方案有以下的缺陷
- 互斥体的名称有被其他应用程序使用的较小,潜在风险.此时,该方案不再有效,并且很难检测到bug.
- 该方案无法实现允许一个应用程序产生N个实例这样的一般问题.
- 使用Process类.
1 ///2 /// check whether other instance of the application is running. 3 /// 4 ///5 private bool TestIfAlreadyRunning() 6 { 7 Process currentProcess = Process.GetCurrentProcess(); 8 9 foreach (var process in Process.GetProcesses())10 {11 // avoid check this process itself.12 if(currentProcess.Id != process.Id)13 {14 //if other instance is running,the Process Name must identical.15 if (currentProcess.ProcessName == process.ProcessName)16 return true;17 }18 }19 20 return false;21 }
- Process.GetProcesses()也可以传递机器名称.这样返回的就是远程机器上运行的所有进程.