Конференция "WinAPI" » Закрытие другой копии программы. [D7, WinXP]
 
  • Petrovich (15.04.08 15:01) [0]
    Ситуация:
    Есть софтинка на Дельфи7, которая при попытке повторного запуска говорит, что уже запущена копия и вторая копия не стартует. Добились этого таким образом:
    const
     UNIQUE_NAME = 'TEST_SOFT_THE_UNIQUE_MUTEX_TO_PREVENT_MULTIPLE_INSTANCES';
    ...
       if OpenMutex(MUTEX_MODIFY_STATE, False, UNIQUE_NAME) = 0 then
         MuGuard := CreateMutex(nil, False, UNIQUE_NAME)
       else begin
         LogWrite('Попытка повторного запуска!');
         Appplication.Terminate;
       end;
    ...
    Теперь надо при потытке повторного запуска не только вторую копию закрывать, но и первую, ранее запущенную!
  • Сергей М. © (15.04.08 16:43) [1]
    Разрешаем, если надо)
  • tesseract © (15.04.08 17:11) [2]
    Заводишь сообщение  своё, по нему делаешь выход из программы, при старте если мутекс занят - рассылаешь рупорным методом.
  • SergeyIT © (15.04.08 18:45) [3]
    >  Appplication.Terminate;
    а это здесь зачем?
    где-то так:

    begin
     CreateMutex(nil, TRUE, 'TEST_SOFT_XXXXXXX_INSTANCES');
     if GetLastError = ERROR_ALREADY_EXISTS then
     begin
       h := FindWindow('TMainXXX', nil);
       if h <> 0 then
          SendMessage(h, WM_USER + 666, 0, 0); //убить приложение
     end
     else
     begin
       Application.Initialize;
       Application.CreateForm(TMainXXX, Main);
       Application.Run;
     end;
    end.


    И в коде приложения обработать сообщение  WM_USER + 666, правильно завершить приложение.
 
Конференция "WinAPI" » Закрытие другой копии программы. [D7, WinXP]
Есть новые Нет новых   [134432   +20][b:0.001][p:0.001]