-
Как узнать, сколько копий приложения работает в данный момент времени?
-
1. Создать Memory Mapped File в страничной памяти системы (см. CreateFileMapping и MapViewOfFile) размером 4 байта.
2. Эти 4 байта содержат счетчик запущенных копий. Каждая новая запущенная копия инкрементирует его.
-
Уточнение:
мне даже не важно знать сколько именно копий работает,
а достаточно лишь знать работают ли еще другие копии программы в данный момент или нет?
-
> тКнопка (11.04.08 00:18) [2]
Совет [1] вполне подходит.
-
-
> Семеныч (11.04.08 01:02) [4]
То обсуждение не было "завершено". Бо сам вопрос попытки повторного запуска приложения гораздо более сложный. В архивах можно найти более плодотворное обсуждение данного вопроса, но нет времени/желания копаться в архивах.
-
> Германн © (11.04.08 01:25) [5]
> нет времени/желания копаться в архивах.
И смысла тоже - для профи вопрос совершенно ясен и без архивов.
-
> 1. Создать Memory Mapped File в страничной памяти системы
> (см. CreateFileMapping и MapViewOfFile) размером 4 байта.
>
>
> 2. Эти 4 байта содержат счетчик запущенных копий. Каждая
> новая запущенная копия инкрементирует его.
Это плохой способ. Каждая умершая не своей смертью копия оставит свой след в этом счетчике. Что мешает просто пройтись по процессам любым доступным способом и посмотреть, из какого модуля они запускались?
-
> DrPass © (11.04.08 01:33) [7]
>
>
> > 1. Создать Memory Mapped File в страничной памяти системы
> > (см. CreateFileMapping и MapViewOfFile) размером 4 байта.
>
> >
> >
> > 2. Эти 4 байта содержат счетчик запущенных копий. Каждая
> > новая запущенная копия инкрементирует его.
>
> Это плохой способ. Каждая умершая не своей смертью копия
> оставит свой след в этом счетчике.
Это нормальный способ для нормальных случаев. Параноики могут использовать любые другие способы по их выбору. :)
Не прими на свой счёт.
-
> DrPass © (11.04.08 01:33) [7]
Верно. Но этот способ более трудоемок и какой выбрать (более простой или более точный) - это зависит от требований задачи. В данном случае, как выяснилось, даже и счетчика не нужно.
-
> Семеныч (11.04.08 01:41) [9]
>
> > DrPass © (11.04.08 01:33) [7]
>
> Верно. Но этот способ более трудоемок и какой выбрать (более
> простой или более точный) - это зависит от требований задачи.
> В данном случае, как выяснилось, даже и счетчика не нужно.
>
>
В этом случае ещё ничего не известно. Судя по [0] и [2]. По моему опыту знаю, что возможен допвопрос: "Если уже запущена моя программа, то как ей передать командную строку".
-
> DrPass © (11.04.08 01:33) [7]
... Что мешает просто пройтись
> по процессам любым доступным способом и посмотреть, из какого
> модуля они запускались?
А может-ли кто-нибудь показать простейший пример?
-
> тКнопка (11.04.08 02:08) [11]
>
>
> > DrPass © (11.04.08 01:33) [7]
> ... Что мешает просто пройтись
> > по процессам любым доступным способом и посмотреть, из
> какого
> > модуля они запускались?
>
>
> А может-ли кто-нибудь показать простейший пример?
>
Тебя испугало "Memory Mapped File"? Тогда простейший пример тебя испугает ещё больше. Лучше сразу напиши "дайте код!".
-
> Германн © (11.04.08 02:17) [12]
...
> Тебя испугало "Memory Mapped File"? Тогда простейший пример
> тебя испугает ещё больше. Лучше сразу напиши "дайте код!
> ".
Нет, такой способ ( "Memory Mapped File" ) мне не подходит.
Мне нужно пройтись по процессам, как подсказывает DrPass .
Дайте код!
-
> [13] тКнопка (11.04.08 02:30)
> Нет, такой способ ( "Memory Mapped File" ) мне не подходит.
> Мне нужно пройтись по процессам, как подсказывает DrPass .
> Дайте код!
"пройтись по процессам" не совсем то, что надо.
Зависит от причин по которым нельзя допустить второй запуск.
Пользователь может запустить программу под разными именами (переименовывая exe-файл)
-
> Riply © (11.04.08 02:40) [14]
Саш. Дай ему код. Но в "черновике". Пусть поймёт всю сложность задачи.
-
> Германн © (11.04.08 02:53) [15]
>
>
> > Riply © (11.04.08 02:40) [14]
>
> Саш. Дай ему код. Но в "черновике". Пусть поймёт всю сложность
> задачи.
>
Не. Не так сформулировал.
Дай ему код в "наброске".
-
Уточню. Задача такая: при закрытии программы, нужно проверить, если больше нет запущенных копий программы, то нужно удалить временную попку и все ее соджержание.
-
> тКнопка (11.04.08 02:59) [17]
>
> Уточню. Задача такая: при закрытии программы, нужно проверить,
> если больше нет запущенных копий программы, то нужно удалить
> временную попку и все ее соджержание.
>
Эээ. Если не обращать внимание на "некую скабрезность вопроса", то чем не устраивают ответ [1]?
-
> тКнопка (11.04.08 02:59) [17]
Сделай проще. Создай в этой "попке" файл а в нем счетчик и будет у тебя программа завершаться через проверку попки =)))