Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.03.29;
Скачать: CL | DM;

Вниз

Как узнать, сколько копий приложения запущенно?   Найти похожие ветки 

 
тКнопка   (2008-04-10 23:53) [0]

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


 
Семеныч   (2008-04-11 00:00) [1]

1. Создать Memory Mapped File в страничной памяти системы (см. CreateFileMapping и MapViewOfFile) размером 4 байта.

2. Эти 4 байта содержат счетчик запущенных копий. Каждая новая запущенная копия инкрементирует его.


 
тКнопка   (2008-04-11 00:18) [2]

Уточнение:
мне даже не важно знать сколько именно копий работает,
а достаточно лишь знать работают ли еще другие копии программы в данный момент или нет?


 
Германн ©   (2008-04-11 00:26) [3]


> тКнопка   (11.04.08 00:18) [2]

Совет [1] вполне подходит.


 
Семеныч   (2008-04-11 01:02) [4]

http://delphimaster.net/view/1-1207045289/


 
Германн ©   (2008-04-11 01:25) [5]


> Семеныч   (11.04.08 01:02) [4]

То обсуждение не было "завершено". Бо сам вопрос попытки повторного запуска приложения гораздо более сложный. В архивах можно найти более плодотворное обсуждение данного вопроса, но нет времени/желания копаться в архивах.


 
Семеныч   (2008-04-11 01:31) [6]

> Германн ©   (11.04.08 01:25) [5]

> нет времени/желания копаться в архивах.

И смысла тоже - для профи вопрос совершенно ясен и без архивов.


 
DrPass ©   (2008-04-11 01:33) [7]


> 1. Создать Memory Mapped File в страничной памяти системы
> (см. CreateFileMapping и MapViewOfFile) размером 4 байта.
>
>
> 2. Эти 4 байта содержат счетчик запущенных копий. Каждая
> новая запущенная копия инкрементирует его.

Это плохой способ. Каждая умершая не своей смертью копия оставит свой след в этом счетчике. Что мешает просто пройтись по процессам любым доступным способом и посмотреть, из какого модуля они запускались?


 
Германн ©   (2008-04-11 01:39) [8]


> DrPass ©   (11.04.08 01:33) [7]
>
>
> > 1. Создать Memory Mapped File в страничной памяти системы
> > (см. CreateFileMapping и MapViewOfFile) размером 4 байта.
>
> >
> >
> > 2. Эти 4 байта содержат счетчик запущенных копий. Каждая
> > новая запущенная копия инкрементирует его.
>
> Это плохой способ. Каждая умершая не своей смертью копия
> оставит свой след в этом счетчике.

Это нормальный способ для нормальных случаев. Параноики могут использовать любые другие способы по их выбору. :)
Не прими на свой счёт.


 
Семеныч   (2008-04-11 01:41) [9]

> DrPass ©   (11.04.08 01:33) [7]

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


 
Германн ©   (2008-04-11 01:53) [10]


> Семеныч   (11.04.08 01:41) [9]
>
> > DrPass ©   (11.04.08 01:33) [7]
>
> Верно. Но этот способ более трудоемок и какой выбрать (более
> простой или более точный) - это зависит от требований задачи.
>  В данном случае, как выяснилось, даже и счетчика не нужно.
>
>

В этом случае ещё ничего не известно. Судя по [0] и [2]. По моему опыту знаю, что возможен допвопрос: "Если уже запущена моя программа, то как ей передать командную строку".


 
тКнопка   (2008-04-11 02:08) [11]


> DrPass ©   (11.04.08 01:33) [7]
... Что мешает просто пройтись
> по процессам любым доступным способом и посмотреть, из какого
> модуля они запускались?


А может-ли кто-нибудь показать простейший пример?


 
Германн ©   (2008-04-11 02:17) [12]


> тКнопка   (11.04.08 02:08) [11]
>
>
> > DrPass ©   (11.04.08 01:33) [7]
> ... Что мешает просто пройтись
> > по процессам любым доступным способом и посмотреть, из
> какого
> > модуля они запускались?
>
>
> А может-ли кто-нибудь показать простейший пример?
>

Тебя испугало "Memory Mapped File"? Тогда простейший пример тебя испугает ещё больше. Лучше сразу напиши "дайте код!".


 
тКнопка   (2008-04-11 02:30) [13]


> Германн ©   (11.04.08 02:17) [12]
...
> Тебя испугало "Memory Mapped File"? Тогда простейший пример
> тебя испугает ещё больше. Лучше сразу напиши "дайте код!
> ".


Нет, такой способ ( "Memory Mapped File" ) мне не подходит.
Мне нужно пройтись по процессам, как подсказывает DrPass .
Дайте код!


 
Riply ©   (2008-04-11 02:40) [14]

> [13] тКнопка   (11.04.08 02:30)
> Нет, такой способ ( "Memory Mapped File" ) мне не подходит.
> Мне нужно пройтись по процессам, как подсказывает DrPass .
> Дайте код!

"пройтись по процессам" не совсем то, что надо.
Зависит от причин по которым нельзя допустить второй запуск.
Пользователь может запустить программу под разными именами (переименовывая exe-файл)


 
Германн ©   (2008-04-11 02:53) [15]


> Riply ©   (11.04.08 02:40) [14]

Саш. Дай ему код. Но в "черновике". Пусть поймёт всю сложность задачи.


 
Германн ©   (2008-04-11 02:55) [16]


> Германн ©   (11.04.08 02:53) [15]
>
>
> > Riply ©   (11.04.08 02:40) [14]
>
> Саш. Дай ему код. Но в "черновике". Пусть поймёт всю сложность
> задачи.
>

Не. Не так сформулировал.
Дай ему код в "наброске".


 
тКнопка   (2008-04-11 02:59) [17]

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


 
Германн ©   (2008-04-11 03:08) [18]


> тКнопка   (11.04.08 02:59) [17]
>
> Уточню. Задача такая: при закрытии программы, нужно проверить,
>  если больше нет запущенных копий программы, то нужно удалить
> временную попку и все ее соджержание.
>

Эээ. Если не обращать внимание на "некую скабрезность вопроса", то чем не устраивают ответ [1]?


 
Andy BitOff ©   (2008-04-11 03:16) [19]

> тКнопка   (11.04.08 02:59) [17]

Сделай проще. Создай в этой "попке" файл а в нем счетчик и будет у тебя программа завершаться через проверку попки =)))


 
тКнопка   (2008-04-11 03:38) [20]

Упс, ошибка, "временная папка".

А если электричество выключат, ведь счетчики останутся? И там еще предусмотренно аварийное востановление. и т.д. ...

Вобщем, я решил остановиться на EnumWindows! Так можно? Дайте код! :)


 
Германн ©   (2008-04-11 04:07) [21]


> тКнопка   (11.04.08 03:38) [20]
>
> Упс, ошибка, "временная папка".
>
> А если электричество выключат

А если электричество выключат, Это уже не твоя забота, если твоя задача не разработка "системы жизнеобеспечения"!


 
KSergey ©   (2008-04-11 07:44) [22]

Для енумерации процессов у пользователя из под которого запущена прога может банально не хватить прав. А работать под админом - зло.


 
тКнопка   (2008-04-11 08:15) [23]

EnumWindows подойдет?


 
clickmaker ©   (2008-04-11 11:41) [24]

EnumProcesses или Process32First/Next


 
Семеныч   (2008-04-11 14:26) [25]

Кошмар.

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

И никаких копий вообще определять не нужно.


 
тКнопка   (2008-04-11 19:41) [26]


> clickmaker ©   (11.04.08 11:41) [24]
> EnumProcesses или Process32First/Next


[Pascal Error] Unit3.pas(29): E2003 Undeclared identifier: "Process32First"

[Pascal Error] Unit3.pas(30): E2003 Undeclared identifier: "EnumProcesses"


 
{RASkov} ©   (2008-04-11 19:44) [27]

> [26] тКнопка   (11.04.08 19:41)

Ctrl+F ищи и подключай необходимые модули... так же просто F1 может помочь...


 
тКнопка   (2008-04-11 19:57) [28]


> KSergey ©   (11.04.08 07:44) [22]
> Для енумерации процессов у пользователя из под которого
> запущена прога может банально не хватить прав. А работать
> под админом - зло.


Это что значит, EnumProcesses или Process32First/Next не подойдет?


 
Efir   (2008-04-11 20:34) [29]

Можно еще использовать мьютексы.


 
Loginov Dmitry ©   (2008-04-11 23:04) [30]

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


Удаляй временную папку при старте первого экземпляра. Это гораздо проще.


 
Германн ©   (2008-04-12 01:05) [31]


> Loginov Dmitry ©   (11.04.08 23:04) [30]


> Удаляй временную папку при старте первого экземпляра. Это
> гораздо проще.
>

И не проще (судя по сабжу) и неверно по сути.


 
clickmaker ©   (2008-04-12 19:06) [32]

> [25] Семеныч   (11.04.08 14:26)

а если не нужна проге папка?


 
Семеныч   (2008-04-12 22:19) [33]

> clickmaker ©   (12.04.08 19:06) [32]

Тогда плохо. Тогда придется прочесть ветку. Ну пусть не всю, но хотя бы [0] и [17]


 
Leonid Troyanovsky ©   (2008-04-13 10:33) [34]


> Семеныч   (12.04.08 22:19) [33]

> Тогда плохо. Тогда придется прочесть ветку. Ну пусть не
> всю, но хотя бы [0] и [17]

Дык, все равно, непонятно, зачем каждый раз создавать-удалять папку.

А файлы можно создать with FILE_ATTRIBUTE_TEMPORARY & FILE_FLAG_DELETE_ON_CLOSE - FAF.

--
Regards, LVT.



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

Текущий архив: 2009.03.29;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.025 c
15-1232959391
123-ий
2009-01-26 11:43
2009.03.29
Дженерики


15-1232784590
Кое кто
2009-01-24 11:09
2009.03.29
Чем читать файл *.RM?


2-1233732829
проходил мимо решил зайти
2009-02-04 10:33
2009.03.29
Сортировка данных таблице


2-1233732753
Mishenka
2009-02-04 10:32
2009.03.29
Ошибка при обращении к свойству Lines компонента DBRichEdit


15-1232949323
El
2009-01-26 08:55
2009.03.29
Исходные тексты программ