Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.23;
Скачать: CL | DM;

Вниз

не запустить вторую копию программы   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.017 c
15-1187874286
SerJaNT
2007-08-23 17:04
2007.09.23
Программа для показа прогноза погоды


11-1171208942
Виталий*
2007-02-11 18:49
2007.09.23
как в list view программно чекбоксы включать и выключать?


10-1136900689
Alexey V.
2006-01-10 16:44
2007.09.23
Обновление данных в Excel


15-1187749319
Slider007
2007-08-22 06:21
2007.09.23
С днем рождения ! 22 августа 2007 среда


2-1188456476
vasyl
2007-08-30 10:47
2007.09.23
ProgressBar