日期:2014-05-18  浏览次数:20914 次

避免在一台机器上同时运行一应用程序的多个实例
private bool AppAlreadyRunning()
  ...{
  System.Diagnostics.Process curProcess = System.Diagnostics.Process.GetCurrentProcess();
  System.Diagnostics.Process[] allProcess = System.Diagnostics.Process.GetProcesses();
  foreach (System.Diagnostics.Process process in allProcess)
  ...{
  if (process.Id != curProcess.Id)  
  ...{
  if (process.ProcessName == curProcess.ProcessName)
  return true;
  }
  }
  return false;
  }

对if (process.Id != curProcess.Id)不是很明白,为什么不是==
如果不相等说明什么呢,是不是当前进程没有运行

------解决方案--------------------
process.Id != curProcess.Id
查找进程和当前程序的进程不是同一个
如果相等就是进程本身

判断程序路径和程序名我感觉都不大好

希望下面有人解答
------解决方案--------------------
Process.GetProcesses(); 获取的Process是包括当前进行的。在比较的时候要除去本进程,是不是本进行通过ID来判读。所以就有了:

 if (process.Id != curProcess.Id)
。。。

但程序改成如下可能就好理解了:
private bool AppAlreadyRunning() 

System.Diagnostics.Process curProcess = System.Diagnostics.Process.GetCurrentProcess(); 
System.Diagnostics.Process[] allProcess = System.Diagnostics.Process.GetProcesses(); 
foreach (System.Diagnostics.Process process in allProcess) 
...{ 
if (process.ProcessName == curProcess.ProcessName) 

if (process.Id != curProcess.Id)
{
return true; 
}
}

return false; 
}