Форум: "Основная";
Текущий архив: 2009.03.29;
Скачать: [xml.tar.bz2];
ВнизКак узнать, сколько копий приложения запущенно? Найти похожие ветки
← →
тКнопка (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;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.048 c