Главная страница
    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.044 c
15-1188081292
Thor234
2007-08-26 02:34
2007.09.23
Помогите студенту :)


1-1184328518
ambhtr
2007-07-13 16:08
2007.09.23
Как проверить строку на заданый формат (шаблон)


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


2-1188239126
Евгений Р.
2007-08-27 22:25
2007.09.23
Вертикальный текст


2-1188173770
HF-Trade
2007-08-27 04:16
2007.09.23
Инвертировать мышь по оси Y





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский