Конференция "Основная" » Как узнать, сколько копий приложения запущенно?
 
  • тКнопка (10.04.08 23:53) [0]
    Как узнать, сколько копий приложения работает в данный момент времени?
  • Семеныч (11.04.08 00:00) [1]
    1. Создать Memory Mapped File в страничной памяти системы (см. CreateFileMapping и MapViewOfFile) размером 4 байта.

    2. Эти 4 байта содержат счетчик запущенных копий. Каждая новая запущенная копия инкрементирует его.
  • тКнопка (11.04.08 00:18) [2]
    Уточнение:
    мне даже не важно знать сколько именно копий работает,
    а достаточно лишь знать работают ли еще другие копии программы в данный момент или нет?
  • Германн © (11.04.08 00:26) [3]

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

    Совет [1] вполне подходит.
  • Семеныч (11.04.08 01:02) [4]
  • Германн © (11.04.08 01:25) [5]

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

    То обсуждение не было "завершено". Бо сам вопрос попытки повторного запуска приложения гораздо более сложный. В архивах можно найти более плодотворное обсуждение данного вопроса, но нет времени/желания копаться в архивах.
  • Семеныч (11.04.08 01:31) [6]
    > Германн ©   (11.04.08 01:25) [5]

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

    И смысла тоже - для профи вопрос совершенно ясен и без архивов.
  • DrPass © (11.04.08 01:33) [7]

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

    Это плохой способ. Каждая умершая не своей смертью копия оставит свой след в этом счетчике. Что мешает просто пройтись по процессам любым доступным способом и посмотреть, из какого модуля они запускались?
  • Германн © (11.04.08 01:39) [8]

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

    Это нормальный способ для нормальных случаев. Параноики могут использовать любые другие способы по их выбору. :)
    Не прими на свой счёт.
  • Семеныч (11.04.08 01:41) [9]
    > DrPass ©   (11.04.08 01:33) [7]

    Верно. Но этот способ более трудоемок и какой выбрать (более простой или более точный) - это зависит от требований задачи. В данном случае, как выяснилось, даже и счетчика не нужно.
  • Германн © (11.04.08 01:53) [10]

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

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

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


    А может-ли кто-нибудь показать простейший пример?
  • Германн © (11.04.08 02:17) [12]

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

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

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


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

    "пройтись по процессам" не совсем то, что надо.
    Зависит от причин по которым нельзя допустить второй запуск.
    Пользователь может запустить программу под разными именами (переименовывая exe-файл)
  • Германн © (11.04.08 02:53) [15]

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

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

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

    Не. Не так сформулировал.
    Дай ему код в "наброске".
  • тКнопка (11.04.08 02:59) [17]
    Уточню. Задача такая: при закрытии программы, нужно проверить, если больше нет запущенных копий программы, то нужно удалить временную попку и все ее соджержание.
  • Германн © (11.04.08 03:08) [18]

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

    Эээ. Если не обращать внимание на "некую скабрезность вопроса", то чем не устраивают ответ [1]?
  • Andy BitOff © (11.04.08 03:16) [19]
    > тКнопка   (11.04.08 02:59) [17]

    Сделай проще. Создай в этой "попке" файл а в нем счетчик и будет у тебя программа завершаться через проверку попки =)))
 
Конференция "Основная" » Как узнать, сколько копий приложения запущенно?
Есть новые Нет новых   [134487   +1][b:0][p:0.001]