Форум: "Начинающим";
Текущий архив: 2007.09.23;
Скачать: [xml.tar.bz2];
Внизне запустить вторую копию программы Найти похожие ветки
← →
foreverDelphi © (2007-08-26 03:27) [0]запустил программу, создал атом и наслаждаешся результатом, никаких других запусков копий программы одновремено. А вот грабли в том что в случае вылета программы с ошибкой атом не удаляется в Destroy формы и в результате после етого невозможно перезапустить программу.
← →
Германн © (2007-08-26 03:35) [1]
> foreverDelphi © (26.08.07 03:27)
>
> запустил программу, создал атом и наслаждаешся результатом,
> никаких других запусков копий программы одновремено. А
> вот грабли в том что в случае вылета программы с ошибкой
> атом не удаляется в Destroy формы и в результате после етого
> невозможно перезапустить программу.
>
А что это значит?
Значит то, что атом нужно удалять не только "в Destroy формы", но и в других местах. Особо следует обратить внимание на "обратку ошибок". :)
P.S. На обработку ошибок стоит обращать внимание всегда!
← →
foreverDelphi © (2007-08-26 03:43) [2]
> Значит то, что атом нужно удалять не только "в Destroy формы",
> но и в других местах. Особо следует обратить внимание на
> "обратку ошибок". :)
я как новичок, еще задам вопрос, а обрабчик ошибок всегда будет выполнен, и еще, а если просто завершить процесс через менеджер процессов
← →
Leonid Troyanovsky © (2007-08-26 07:38) [3]
> foreverDelphi © (26.08.07 03:43) [2]
> будет выполнен, и еще, а если просто завершить процесс через
> менеджер процессов
Если процесс будет терминирован, то атом так и останется
до конца сессии.
Т.е., это плохой способ, лучше создавать именованные
объекты ядра, например, CreateFileMapping.
Есть такая конференция "Начинающим", welcome.
--
Regards, LVT.
← →
Loginov Dmitry © (2007-08-26 09:40) [4]самый короткий способ для реализации задуманного:
program project1;
begin
CreateMutex(nil, False, "уникальная строка");
if GetLastError = ERROR_ALREADY_EXISTS then Exit;
..............
end;
Может есть варианты покороче, не знаю :)
← →
foreverDelphi © (2007-08-26 14:59) [5]
> самый короткий способ для реализации задуманного:
а я чего-то думал раньше что мутексы не запрещают запуск той же программы, но с другого каталога, а так спасиба и разобрался и подходит на 100%
← →
DrPass © (2007-08-26 15:02) [6]
> чего-то думал раньше что мутексы не запрещают запуск той
> же программы, но с другого каталога
Правильно думал. Они ничего не запрещают, и не разрешают. И вообще никакого отношения к запуску программ не имеют.
← →
brother © (2007-08-27 05:11) [7]
> Правильно думал. Они ничего не запрещают, и не разрешают.
> И вообще никакого отношения к запуску программ не имеют.
>
это раньше, а теперь же понедельник, по понедельникам можно)
← →
orinoko (2007-08-27 12:10) [8]На мой взгляд, это вполне устроит вопрошающего. В событие OnCreate главной формы вставить:
procedure TMainForm.FormCreate(Sender: TObject);
var S: string;
begin
//Проверяем, не запущено ли уже приложение
//Запоминаем заголовок
s:=Application.Title;
//Меняем на что-то другое, чтоб FindWindow его не нашла
Application.Title:="runonce"+s;
//Ищем окно с заголовком приложения
PrevInstWind:=FindWindow(nil,pchar(s));
if PrevInstWind<>0 then
//Если нашли, то ...
begin
//Запрещаем показ главной формы
Application.ShowMainForm := false;
//Завершаем текущее приложение
Application.Terminate;
//Активизируем предыдущую копию
if IsIconic(PrevInstWind)
then
ShowWindow(PrevInstWind,SW_RESTORE)
else
SetForegroundWindow(PrevInstWind);
//Завершаем процедуру
exit;
end;
//Восстанавливаем заголовок
Application.Title:=s;
//Дальше пишется, если ещё чёта нужно
...
end;
← →
iXT © (2007-08-27 12:57) [9]> [8] orinoko (27.08.07 12:10)
А кто и где говорил про форму? Или телепатор сказал? :)
← →
Leonid Troyanovsky © (2007-08-27 13:01) [10]
> iXT © (27.08.07 12:57) [9]
> А кто и где говорил про форму? Или телепатор сказал? :)
foreverDelphi © (26.08.07 03:27) :)
--
Regards, LVT.
← →
Leonid Troyanovsky © (2007-08-27 13:07) [11]
> orinoko (27.08.07 12:10) [8]
> OnCreate главной формы вставить:
Не все так просто, к сожалению.
Скажем, не FindWindow, а EnumWindows,
и, видимо, не OnCreate, а кроме того,
понадобится синхронизация и т.п.
--
Regards, LVT.
← →
iXT © (2007-08-27 13:30) [12]> [10] Leonid Troyanovsky © (27.08.07 13:01)
Упс, упустил :)
← →
Anatoly Podgoretsky © (2007-08-27 13:43) [13]> Leonid Troyanovsky (27.08.2007 13:07:11) [11]
А зачем, при наличии надежных методов искать сомнительные.
← →
Leonid Troyanovsky © (2007-08-27 13:49) [14]
> Anatoly Podgoretsky © (27.08.07 13:43) [13]
> А зачем, при наличии надежных методов искать сомнительные.
Сначала в сомнительных нужно усомниться :)
--
Regards, LVT.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.09.23;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.044 c