Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.07.2010, 18:54   #1
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
Вопрос Запуск только одной копии приложения

Здравствуйте! Написал программу, использую Mutex для ограничения одновременно запущенных копий программы. Но вот когда я выбераю тип построения Release, то этот Mutex перестаёт работать. Вообще я понял так, на это влияет опция "Оптимизировать код". Дело в том, что отключить эту опцию не вариант, после любого обфускатора этот Mutex также не работает. Вообще не знаю что делать.

Код:
static class Program
{
    /// <summary>
    /// Главная точка входа для приложения.
    /// </summary>
    [STAThread]
    static void Main(string[] arguments)
    {
        //Включаем визуальные стили раньше, чем будет проверка, чтобы MessageBox выглядел современно
        Application.EnableVisualStyles(); 
        Application.SetCompatibleTextRenderingDefault(false);

        const String AppName = "My Program"; //Просто название приложения
        bool oneOnly;
        bool NeedHide = false;
        if (arguments.Length != 0)
        {
            if (arguments[0] == "-hide")
            {
                NeedHide = true;
            }
        }

        // Указываем имя своей программы. В нашем случае My Program
        Mutex m = new Mutex(true, AppName + "7696579547995", out oneOnly);
        if (oneOnly)
        {
            Application.Run(new MainForm(NeedHide));
        }
        else
        {
            MessageBox.Show("Приложение " + AppName + " уже запущено.");
        } 
    
    }
}
Может есть вариант какой нибудь другой ограничивающий кол-во запущенных приложений?

Последний раз редактировалось Casper-SC; 17.07.2010 в 19:06.
Casper-SC вне форума Ответить с цитированием
Старый 18.07.2010, 02:06   #2
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Поведали мне секрет на другом форуме. Выложу здесь, может будет кому полезно знать это:
Цитата:
сделай мюьтекс полем класса, в релизе он идёт в мусор и там освобождается, т.к. никто ссылку на него не хранит
или, что правильней, наверное, после Application.Run(new MainForm(NeedHide)); вызови его освобождение
Добавил освобождение Mutex'a, теперь всё нормально работает и обфускатор тоже ничего не портит, как портил раньше.
Код:
            // Указываем имя своей программы. В нашем случае My Program
            Mutex m = new Mutex(true, AppName + "7696579547995", out oneOnly);
            if (oneOnly)
            {
                Application.Run(new MainForm(NeedHide));
                m.ReleaseMutex(); //ВОТ ОНО
            }
            else
            {
                MessageBox.Show("Приложение " + AppName + " уже запущено.");
            }
Casper-SC вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Постороний файл и запуск его только с нашего приложения serres Общие вопросы .NET 2 25.02.2010 00:17
Запуск приложения jkpro Помощь студентам 16 08.11.2009 12:31
Запуск нескольких клиентов с одной машины unit-85 Работа с сетью в Delphi 4 16.03.2009 13:02
Запуск приложения Zloy_Doomer Общие вопросы Delphi 2 10.10.2008 13:47
Запуск приложения Артэс Общие вопросы C/C++ 2 07.06.2008 17:38