Исключение повторного запуска

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by DooD, 27 Sep 2011.

  1. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    Приветствую всех.Вот хотел спросить какие еще есть способы исключения повторного запуска программы,кроме как юзать мьютекс?Ибо запустил прогу и за ней вторую, у них исключения прорабатываются одним и тем же кодом через мьютекс в следствие чего одна из прог не запускается так как считает что уже запущена.Жду предложений.
     
  2. spider-intruder

    spider-intruder Elder - Старейшина

    Joined:
    9 Dec 2005
    Messages:
    700
    Likes Received:
    339
    Reputations:
    37
    Поиск процесса с именем файла (если он неизменен)
    Создание временного флага в реестре, файловой системе
    .
    .
    .
    .
    Создание пайпа(pipe)
    Открытие порта (socket)
    Сканирование адресного пространства всех запущенных процессов, парсинг их секции кода/даных/ресурсов и поиск уникальной сигнатуры.
    Смена обоев рабочего стола на свой уникальный BMP файл c последующим сканированием картинки рабочего стола на предмет установки этого самого файла путем битового анализа файла...
    Установкой перехвата некой ядерной функции при первичном запуске программы с последующей проверкой установки этого хука...
    Постановка вопроса пользователю о том, что он согласен с возможным сбоем програмым сли он соврет о том, что уже запускал копию программы

    Все зависти от извращенности фантазии человека.. :)
     
    #2 spider-intruder, 27 Sep 2011
    Last edited: 27 Sep 2011
  3. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    можно создавать именованный объект. то есть:
    1. создаешь именованный объект.
    2. вызываешь GetLastError() и сравниваешь возвращаемое значение с ERROR_ALREDY_EXISTS.
    3. если совпадает - значит экземпляр приложения уже запущен.
     
    #3 Ins3t, 27 Sep 2011
    Last edited: 27 Sep 2011
  4. yuran666666

    yuran666666 Member

    Joined:
    18 Jan 2009
    Messages:
    84
    Likes Received:
    19
    Reputations:
    11
    Драйвер-фильтр файловой системы, который будет скрывать исполняемый файл после запуска вроде еще никто не предлагал.
    ЗЫ: использование в исполняемом файле оверлея, сам понимаешь, недопустимо.
     
    #4 yuran666666, 27 Sep 2011
    Last edited: 27 Sep 2011
  5. spider-intruder

    spider-intruder Elder - Старейшина

    Joined:
    9 Dec 2005
    Messages:
    700
    Likes Received:
    339
    Reputations:
    37
    А скрывать никто и не просил... Читай ТЗ
     
  6. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    никогда на mutex'ах не было проблем, что-то ты там перестарался
     
  7. yuran666666

    yuran666666 Member

    Joined:
    18 Jan 2009
    Messages:
    84
    Likes Received:
    19
    Reputations:
    11
    Если после запуска ты не будешь иметь возможности вообще видеть исполняемый файл, то ты его и не запустишь, в чем собственно и заключалось ТЗ, понел, дурашка?
     
  8. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Удивительно, что никто не посоветовал shared-секции, хотя там есть свои минусы...
     
  9. Jingo Bo

    Jingo Bo Member

    Joined:
    25 Oct 2009
    Messages:
    368
    Likes Received:
    51
    Reputations:
    7
    Удивительно, что кто то это предложил :
     
  10. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    я думал о более простом решении:
    Находить по активации формы окно с нужным заголовком и закрываться если найдено.Способ хоть и прост, но по идее должен работать.Спасибо всем отписавшим,рассмотрю и Ваши варианты.
     
  11. fire64

    fire64 Elder - Старейшина

    Joined:
    1 Apr 2008
    Messages:
    251
    Likes Received:
    22
    Reputations:
    5
    fd00ch, я кстати тоже не понял, а что собственно ТС не устраивает, если он уже все сделал?
     
  12. DYUMON

    DYUMON New Member

    Joined:
    15 Sep 2010
    Messages:
    68
    Likes Received:
    2
    Reputations:
    0
    На Delphi это делается как два пальца об асфальт
    PHP:
    program Project1;

    uses
      Forms
    ,
      
    Windows,
      
    Unit1 in 'Unit1.pas' {Form1};

    {
    $R *.res}

    begin
      Application
    .Initialize;
      if 
    findwindow('TForm1','Form1')<>0  then
       Application
    .Terminate;
      
    Application.CreateForm(TForm1Form1);
      
    Application.Run;
    end.
    соответственно меняешь своего окна класс и имя как тебе надо.
     
  13. C00LPack

    C00LPack Member

    Joined:
    7 Oct 2010
    Messages:
    425
    Likes Received:
    66
    Reputations:
    19
    DYUMON, что за ересь?
    Code:
    SetLastError(0);
    CreateMutex(nil,true,'OLOLO');
    if GetLastError=ERROR_ALREADY_EXISTS then halt;
    
     
  14. DYUMON

    DYUMON New Member

    Joined:
    15 Sep 2010
    Messages:
    68
    Likes Received:
    2
    Reputations:
    0
    Да хз я таким никогда не пользовался. там по идее если программа упала с ошибкой и не убрала после себя обьект то потом хрен запустишь прогу повторно(проверил обьект убирается).
     
    #14 DYUMON, 4 Oct 2011
    Last edited: 4 Oct 2011