Запуск приложения в единственном экземпляре

Тема в разделе "WASM.WIN32", создана пользователем Lex2029, 27 ноя 2007.

  1. Lex2029

    Lex2029 New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2007
    Сообщения:
    199
    Как бы это осуществить?
    Не используя посторонние объекты...
    Т.е. Именно посчитать кол-во запущенных процессов, и если n, то не запускать еще...
     
  2. MikDay

    MikDay New Member

    Публикаций:
    0
    Регистрация:
    5 май 2005
    Сообщения:
    32
    Адрес:
    Minsk
    Если "n" небольшое, то можно OpenMutex/CreateMutex с автонумерованными именами
     
  3. Lex2029

    Lex2029 New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2007
    Сообщения:
    199
    Не корректно выразился :dntknw: Блин, не умею объяснять...
    Т.е. вот есть MyProg.exe, я его запускаю. А если я его запускаю второй раз, не выйдя из первого экземпляра, то второй экземпляр выходит.
     
  4. MikDay

    MikDay New Member

    Публикаций:
    0
    Регистрация:
    5 май 2005
    Сообщения:
    32
    Адрес:
    Minsk
    В начале программы выполняешь OpenMutex, т.е. проверяешь наличие именнованного Mutex (имя должно быть оригинальным, придуманным тобой). Если Mutex существует, то экземпляр программы уже был запущен и нужно завершить текущий процесс. Если не существует - CreateMutex именованный Mutex с твоим оригинальным именем.
     
  5. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
  6. Lex2029

    Lex2029 New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2007
    Сообщения:
    199
    Спасибо всем!
     
  7. Lex2029

    Lex2029 New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2007
    Сообщения:
    199
    А скажите еще плиз, как в принципе получить доступ к процессу, если их несколько?
    Вот например запущено у меня 3 notepad.exe, как мне например каждый закрыть? Process32First/Next только 1 раз возвращает. И если например не закрывать процесс, а что-то другое делать, то все время один и тот же возвращает. А до других как добраться?
     
  8. jecxz

    jecxz New Member

    Публикаций:
    0
    Регистрация:
    23 фев 2006
    Сообщения:
    75
    Адрес:
    Brazil
    Process32First - ищет первый
    Process32Next - следующий

    В цикле делаешь Process32Next до тех пор, пока не будет не найден. Внутри цикла делаешь то, что нужно.
     
  9. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Lex2029
    Код (Text):
    1. .code
    2. start: push 0
    3.         push offset szClassName
    4.         call _imp__FindWindowA@8
    5.         test eax, eax
    6.         jnz ExitLoop
    7. ...
    8. ExitLoop:: push 0
    9.         call _imp__ExitProcess@4
     
  10. CnCVK

    CnCVK New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2006
    Сообщения:
    108
    А если у нас 10 метров свободно, а swap файл уже 1.5 GB?
    тогда первый экземпляр не успеет создать окно, если запустить сразу второй.
    то есть способ с FindWindow не очень надежен.