c# – 如何确定我的应用程序的上一个实例是否正在运行?

我有一个控制台应用程序在C#中,我运行各种奥术自动化任务。我很清楚这应该是一个Windows服务,因为它需要连续运行,但我不想这样做的时间。 (所以,不要建议作为答案)。

在此期间,我需要一些示例C#代码,这将允许我确定是否已经有一个应用程序的实例正在运行。

在老VB6.0天,我会使用App.PrevInstance()

我想能够在我的Main方法中这样做:

static void Main()
{
  if(!MyApp.IsAlreadyRunning())
  {
    while(true)
    {
      RockAndRollAllNightAndPartyEveryDay();
    }
  }
}
最佳答案
Jeroen已经回答了这个问题,但是最好的方法是使用Mutex …而不是Process。这里有一个更完整的答案与代码。

Mutex mutex;

try
{
   mutex = Mutex.OpenExisting("SINGLEINSTANCE");
   if (mutex!= null)
   {
      Console.WriteLine("Error : Only 1 instance of this application can run at a time");
      Application.Exit();
   }
}
catch (WaitHandleCannotBeOpenedException ex)
{
   mutex  = new Mutex(true, "SINGLEINSTANCE");
}

还要记住,你需要运行你的应用程序在某种try {} finally {}块。否则,如果你的应用程序崩溃,而不释放互斥,那么你可能无法再次重新启动它。

转载注明原文:c# – 如何确定我的应用程序的上一个实例是否正在运行? - 代码日志