首页 > 代码库 > 避免在同一机器上同时运行同一应用程序的多个实例

避免在同一机器上同时运行同一应用程序的多个实例

  • 通常,使用有名互斥体(named mutex).但是该方案有以下的缺陷
    • 互斥体的名称有被其他应用程序使用的较小,潜在风险.此时,该方案不再有效,并且很难检测到bug.
    • 该方案无法实现允许一个应用程序产生N个实例这样的一般问题.
  • 使用Process类.
 1         /// <summary> 2         /// check whether other instance of the application is running. 3         /// </summary> 4         /// <returns></returns> 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         }
TestIfAlreadyRunning
  • Process.GetProcesses()也可以传递机器名称.这样返回的就是远程机器上运行的所有进程.