понедельник, 10 марта 2014 г.

Как сделать, чтобы можно было запустить только единственный экземпляр приложения.

Часто возникает необходимость ограничить приложение возможностью запуска только одного экземпляра. Сделать это можно несколькими способами, разной степени красивости и эффективности. Мне же, больше нравится вариант с использованием мьютекса. Для этого нужно в самое начало процедуры Main добавить несколько строчек:

            bool newMutexCreated = false;
            myMutex = new Mutex(false, "MyAppTestMutex", out newMutexCreated);
            if (!newMutexCreated)
            {
                Console.WriteLine("Только один экземпляр приложения может быть запущен!");
                Console.ReadLine();
                Environment.Exit(1);
            }

Ну а если уж делать все совсем красиво и правильно, то имя мьютекса должно быть уникально. Достичь этого можно использовав следующую конструкцию:

string mutexName = ((GuidAttribute)Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(GuidAttribute), false).GetValue(0)).Value.ToString();

К сожалению, цена подобной красоты - необходимость добавления двух дополнительных сборок: System.Reflection и System.Runtime.InteropServices;

Комментариев нет:

Отправить комментарий