Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2008.12.14;
Скачать: [xml.tar.bz2];

Вниз

"Прибить" повторный запуск моей проги.   Найти похожие ветки 

 
Dmitry S ©   (2008-02-05 20:23) [0]

Так нормально:

 CreateMutex(nil, true, mutex_name);
 if GetLastError = ERROR_ALREADY_EXISTS then
   halt(0);


 
Leonid Troyanovsky ©   (2008-02-05 20:32) [1]


> Dmitry S ©   (05.02.08 20:23)

> Так нормально:

Случаи бывают разные.
Одна на десктопе, в сессии, на хосте, в домене и т.д.

Да и, во-ще, важнее цель.
И почему, собс-но, мьтекс.

--
Regards, LVT.


 
Dmitry S ©   (2008-02-05 20:39) [2]

Мне нужно, что-бы два экземпляра программы не работали одновременно в одном сеансе. (Или компьютере, т.к. не предвидится использование терминалов или быстрого переключения пользователей)

Простая защита от случайного запуска второго экземпляра.

Мьютекс, честно говоря, потому, что гдето слышал, что это делается с помощью них. Мьютекс я себе представляю аналогом критической секции.

Есть способы лучше (проще, правильнее)?


 
DVM ©   (2008-02-05 21:09) [3]


> Есть способы лучше (проще, правильнее)?

Правильнее и лучше чем мьютекс, наверное, нет. Чем мьютекс то не угодил?


 
Leonid Troyanovsky ©   (2008-02-05 21:38) [4]


> Dmitry S ©   (05.02.08 20:39) [2]

> Мьютекс, честно говоря, потому, что гдето слышал, что это
> делается с помощью них. Мьютекс я себе представляю аналогом
> критической секции.

В рассматриваемом случае полезные свойства мьютекса никак
не используются. На его месте может быть любой именованный
объект ядра. На мой вкус memory mapped file намного полезней,
бо может хранить некую полезную информацию, скажем, хендл
окна ранее запущенного приложения или параметры комстроки.

--
Regards, LVT.


 
Dmitry S ©   (2008-02-06 07:14) [5]


> намного полезней

Это всеравно что сравнивать Except и Finally. Мне ведь не нужны ни хендл ни параметры. У меня программа-поздравительная открытка. Просто будет мерзко звучать и выглядеть, если будет запущена дважды одновременно:)


 
miek   (2008-02-06 09:12) [6]

использовать для этой цели мутекс - стандартный способ.
только не забывай делать мутексу _уникальное_ имя. обычно для этого берется полный путь к exe-шнику и все слеши заменяются на обратный слеш.


 
Ins ©   (2008-02-06 10:47) [7]


> На мой вкус memory mapped file намного полезней,
> бо может хранить некую полезную информацию, скажем, хендл
> окна ранее запущенного приложения или параметры комстроки.


Я тоже так считаю. Порой важно еще не только запретить запуск второй копии, но и передать от второй копии первой копии командную строку (например, юзер попытался открыть файл двойным кликом по нему, когда одна копия уже запущена). А с помощью MMF мы убиваем сразу трех зайцев - и именованный объект, и хранилище хэндла окна первого экземпляра, и контейнер для передачи командной строки.


 
Leonid Troyanovsky ©   (2008-02-06 12:40) [8]


> Dmitry S ©   (06.02.08 07:14) [5]

> Это всеравно что сравнивать Except и Finally. Мне ведь не
> нужны ни хендл ни параметры.

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

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

--
Regards, LVT.


 
Anatoly Podgoretsky ©   (2008-02-06 13:41) [9]

> Leonid Troyanovsky  (06.02.2008 12:40:08)  [8]

Таймер?


 
Leonid Troyanovsky ©   (2008-02-06 17:57) [10]


> Anatoly Podgoretsky ©   (06.02.08 13:41) [9]

> Таймер?

Ну, это уже не случайность :)

--
Regards, LVT.


 
Dmitry S ©   (2008-02-07 17:12) [11]


> Leonid Troyanovsky ©

В этой теме я выложил готовый вариант программы:
http://delphimaster.net/view/15-1202392451/

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


 
Leonid Troyanovsky ©   (2008-02-07 17:31) [12]


> Dmitry S ©   (07.02.08 17:12) [11]

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

Программу не смотрел, однако понял, что это оконное приложение.
Тогда, пользу от запрета повторного запуска могу увидеть
в активации первой копии (иначе юзер будет недоволен, см. [8]).
Для подобной активации вторая копия должна получить
хендл окна приложения (или формы), что легко достичь,
используя mmf  (см. [7]).

Целесообразность же передачи данных от второй к первой
зависит от практики использования оной программы.

--
Regards, LVT.


 
Dmitry S ©   (2008-02-07 18:19) [13]


> в активации первой копии

А там окна top most. Так что и этого не требуется. Более того не подразумевается какая либо работа на компьютере во время выполнения этой программы. (Программа представляет собой поздравительную валентинку).


 
Leonid Troyanovsky ©   (2008-02-08 00:23) [14]


> Dmitry S ©   (07.02.08 18:19) [13]

> А там окна top most. Так что и этого не требуется. Более
> того не подразумевается какая либо работа

Если оное поздравление сгинет при любом нажатии клавиши
либо шевелении мыши, то меня оно никак не огорчит.

Однако, подозреваю, что поздравлять намеревались не меня.

--
Regards, LVT.


 
Anatoly Podgoretsky ©   (2008-02-08 00:53) [15]

> Leonid Troyanovsky  (08.02.2008 00:23:14)  [14]

Поэтому пока и живой.


 
Anatoly Podgoretsky ©   (2008-02-08 00:54) [16]

Последнее время мой почтовик очень много режет "поздравлений и открыток"



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2008.12.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.01 c
4-1202161064
GanibalLector
2008-02-05 00:37
2008.12.14
RAS, TAPI или WinApi


2-1225990509
cruiser
2008-11-06 19:55
2008.12.14
MessageDlg и иконки


15-1223661982
Kerk
2008-10-10 22:06
2008.12.14
Рабочие переговоры с космической станцией


2-1225878144
demon
2008-11-05 12:42
2008.12.14
Как убрать заголовок формы?


15-1223507703
Eraser
2008-10-09 03:15
2008.12.14
Об IT, госзаказах и немного об образовании





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский