Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.045 c
2-1188084451
foreverDelphi
2007-08-26 03:27
2007.09.23
не запустить вторую копию программы


11-1171855380
ebz
2007-02-19 06:23
2007.09.23
Unicode Control


15-1188201729
Domkrat
2007-08-27 12:02
2007.09.23
TDateTimeEdit


2-1188305625
Shad
2007-08-28 16:53
2007.09.23
Работа с другими программами


15-1188256667
Riply
2007-08-28 03:17
2007.09.23
Годитесь ли Вы в Delphi-программисты ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский