![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
"Прибить" повторный запуск моей проги. [D7, Win2k, WinXP]
Dmitry S © (2008-02-05 20:23:00)Так нормально:
CreateMutex(nil, true, mutex_name);
if GetLastError = ERROR_ALREADY_EXISTS then
halt(0);
Anatoly Podgoretsky (2008-02-08 00:54:00) [1]Последнее время мой почтовик очень много режет "поздравлений и открыток"
Anatoly Podgoretsky (2008-02-08 00:53:00) [2]> Leonid Troyanovsky (08.02.2008 00:23:14) [14]
Поэтому пока и живой.
Leonid Troyanovsky (2008-02-08 00:23:00) [3]
> Dmitry S © (07.02.08 18:19) [13]
> А там окна top most. Так что и этого не требуется. Более
> того не подразумевается какая либо работа
Если оное поздравление сгинет при любом нажатии клавиши
либо шевелении мыши, то меня оно никак не огорчит.
Однако, подозреваю, что поздравлять намеревались не меня.
--
Regards, LVT.
Dmitry S (2008-02-07 18:19:00) [4]
> в активации первой копии
А там окна top most. Так что и этого не требуется. Более того не подразумевается какая либо работа на компьютере во время выполнения этой программы. (Программа представляет собой поздравительную валентинку).
Leonid Troyanovsky (2008-02-07 17:31:00) [5]
> Dmitry S © (07.02.08 17:12) [11]
> Как вы считаете для подобной программы нужно передавать
> первому экземпляру какие либо данные?
Программу не смотрел, однако понял, что это оконное приложение.
Тогда, пользу от запрета повторного запуска могу увидеть
в активации первой копии (иначе юзер будет недоволен, см. [8]).
Для подобной активации вторая копия должна получить
хендл окна приложения (или формы), что легко достичь,
используя mmf (см. [7]).
Целесообразность же передачи данных от второй к первой
зависит от практики использования оной программы.
--
Regards, LVT.
Dmitry S (2008-02-07 17:12:00) [6]
> Leonid Troyanovsky ©
В этой теме я выложил готовый вариант программы:
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1202392451&n=3
Как вы считаете для подобной программы нужно передавать первому экземпляру какие либо данные?
Leonid Troyanovsky (2008-02-06 17:57:00) [7]
> Anatoly Podgoretsky © (06.02.08 13:41) [9]
> Таймер?
Ну, это уже не случайность :)
--
Regards, LVT.
Anatoly Podgoretsky (2008-02-06 13:41:00) [8]> Leonid Troyanovsky (06.02.2008 12:40:08) [8]
Таймер?
Leonid Troyanovsky (2008-02-06 12:40:00) [9]
> Dmitry S © (06.02.08 07:14) [5]
> Это всеравно что сравнивать Except и Finally. Мне ведь не
> нужны ни хендл ни параметры.
Не знаю, что ты с чем сравниваешь, но хендл окна первопущенной
программы вполне мог бы пригодиться.
Ничто так не раздражает юзера как его игнорирование.
Кста, не вижу ничего мерзкого в том, чтобы поздравить
себя хоть дважды.
--
Regards, LVT.
Ins (2008-02-06 10:47:00) [10]
> На мой вкус memory mapped file намного полезней,
> бо может хранить некую полезную информацию, скажем, хендл
> окна ранее запущенного приложения или параметры комстроки.
Я тоже так считаю. Порой важно еще не только запретить запуск второй копии, но и передать от второй копии первой копии командную строку (например, юзер попытался открыть файл двойным кликом по нему, когда одна копия уже запущена). А с помощью MMF мы убиваем сразу трех зайцев - и именованный объект, и хранилище хэндла окна первого экземпляра, и контейнер для передачи командной строки.
miek (2008-02-06 09:12:00) [11]использовать для этой цели мутекс - стандартный способ.
только не забывай делать мутексу _уникальное_ имя. обычно для этого берется полный путь к exe-шнику и все слеши заменяются на обратный слеш.
Dmitry S (2008-02-06 07:14:00) [12]
> намного полезней
Это всеравно что сравнивать Except и Finally. Мне ведь не нужны ни хендл ни параметры. У меня программа-поздравительная открытка. Просто будет мерзко звучать и выглядеть, если будет запущена дважды одновременно:)
Leonid Troyanovsky (2008-02-05 21:38:00) [13]
> Dmitry S © (05.02.08 20:39) [2]
> Мьютекс, честно говоря, потому, что гдето слышал, что это
> делается с помощью них. Мьютекс я себе представляю аналогом
> критической секции.
В рассматриваемом случае полезные свойства мьютекса никак
не используются. На его месте может быть любой именованный
объект ядра. На мой вкус memory mapped file намного полезней,
бо может хранить некую полезную информацию, скажем, хендл
окна ранее запущенного приложения или параметры комстроки.
--
Regards, LVT.
DVM (2008-02-05 21:09:00) [14]
> Есть способы лучше (проще, правильнее)?
Правильнее и лучше чем мьютекс, наверное, нет. Чем мьютекс то не угодил?
Dmitry S (2008-02-05 20:39:00) [15]Мне нужно, что-бы два экземпляра программы не работали одновременно в одном сеансе. (Или компьютере, т.к. не предвидится использование терминалов или быстрого переключения пользователей)
Простая защита от случайногозапуска второго экземпляра.
Мьютекс, честно говоря, потому, что гдето слышал, что это делается с помощью них. Мьютекс я себе представляю аналогом критической секции.
Есть способы лучше (проще, правильнее)?
Leonid Troyanovsky (2008-02-05 20:32:00) [16]
> Dmitry S © (05.02.08 20:23)
> Так нормально:
Случаи бывают разные.
Одна на десктопе, в сессии, на хосте, в домене и т.д.
Да и, во-ще, важнее цель.
И почему, собс-но, мьтекс.
--
Regards, LVT.