Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.049 c
9-1177600266
$00FF00
2007-04-26 19:11
2009.03.29
Проблемы с трением


15-1232509901
Slider007
2009-01-21 06:51
2009.03.29
С днем рождения ! 21 января 2009 среда


15-1233322041
Кто б сомневался
2009-01-30 16:27
2009.03.29
Функции сравнения строк, почему не так?


2-1233266183
R13
2009-01-30 00:56
2009.03.29
For loop control variable must be simple local variable


15-1232392090
AlexDan
2009-01-19 22:08
2009.03.29
Новая домашняя страничка ).





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский