Essentials #3: Как контролировать запуск только одной копии программы

вторник, 18 ноября 2008, Oleksandr Reminnyi

Самым простым способом определить, запущена ли уже наша программа является использование класса Mutex. Для этого создадим вот такой вспомогательный класс. Его задача - проверить наличие мутекса и если его нет - создать новый.

  public class SingleInstance
  {
    private bool firstInstance = false;

    public bool FirstInstance
    {
      get { return firstInstance; }
    }

    public SingleInstance()
    {
      Mutex mutex=null;
      try
      {
        //Пытаемся получить мутекс, если он уже существует
        mutex = Mutex.OpenExisting("ИмяНашегоПриложения");
      }
      catch (WaitHandleCannotBeOpenedException e)
      {
        //Если получили ошибку - мутекс не существует
        firstInstance = true;
      }

      //Если null - создаем новый мутекс
      if (mutex == null)
      {
        mutex = new Mutex(false, "ИмяНашегоПриложения");
        
        //Чтобы слишком умный сборщик мусора не удалил наш мутекс делаем так:
        GC.KeepAlive(mutex);
      }
    }
  }


Следующим шагом является модификация Program.cs следующим образом


        [STAThread]
    static void Main()
    {
      SingleInstance single = new SingleInstance();

      if (single.FirstInstance)
      {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new MainForm());
      }
    }

Соответственно - если single.FirstInstance == true, то наша программа
запустится как обычно. В противном случае - сразу завершит свою работу.

Источник


Ищите нас в интернетах!

Комментарии

Свежие вакансии