![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Закрытие другой копии программы. [D7, WinXP]
Petrovich © (2008-04-15 15:01:00)Ситуация:
Есть софтинка на Дельфи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;
...
Теперь надо при потытке повторного запуска не только вторую копию закрывать, но и первую, ранее запущенную!
SergeyIT (2008-04-15 18:45:00) [1]> 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, правильно завершить приложение.
tesseract (2008-04-15 17:11:00) [2]Заводишь сообщение своё, по нему делаешь выход из программы, при старте если мутекс занят - рассылаешь рупорным методом.
Сергей М. (2008-04-15 16:43:00) [3]Разрешаем, если надо)