Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проверка не запущена ли уже эта программа [D7]


Страницы:   1 2

Надежда ©   (2007-08-07 15:12:00) 

Как можно в своей программе проверить не запущена ли уже эта программа на компьютере ? Пожалуйста, подскажите!


Leonid Troyanovsky   (2007-08-13 13:46:00) [1]


> Надежда   (13.08.07 13:06) [28]

> Всё получилось.

А это только кажется.

Запусти приложение, затем сними диспетчером.
Попытайся запустить снова. Сюрприз?

Кроме того, не стоит пренебрегать и окончанием сессии.
Т.е., попытайся при работающем приложении сделать логоф.
IMHO, проще сделать Application.ShowMainForm := False,
и работать с ним, как с обычным оконным приложением.

--
Regards, LVT.


Надежда   (2007-08-13 13:06:00) [2]

Всем СПАСИБО. Особенно Вам, Сергей М. ! Всё получилось.


ASoft   (2007-08-08 04:51:00) [3]


> Virgo_Style ©   (07.08.07 21:14) [25]
>И еще, я подозреваю, что у этого файла все же есть шанс выжить, например при выключении reset'ом, сбое питания и так далее...

ага, не исключено:) Для этого я и установил проверку в начале своего примера
if FileExists(FileName) then
  begin
  if not DeleteFile(FileName) then
    begin
...

Если есть такой файл и его можно удалить, то можно предположить, что твое приложение было завершено аварийно
Конечно, такой способ не панацея, только как альтернатива и имхо..:-)


trubin   (2007-08-07 21:17:00) [4]


> повторюсь: используйте mutex'ы. они вроде уничтожаются при
> завершении создавшего их процесса...

Или другие именованые объекты ядра: события, проекции файлов ...


Virgo_Style   (2007-08-07 21:14:00) [5]

Leonid Troyanovsky ©   (07.08.07 19:17) [22]
Несколько это сколь?


- Петька, приборы!
- Двадцать!
- Что двадцать?
- А что приборы??

Работа с файлами для этой задачи imho ни к чему. И еще, я подозреваю, что у этого файла все же есть шанс выжить, например при выключении reset'ом, сбое питания и так далее. Возможно я и ошибаюсь.


MetalFan   (2007-08-07 20:15:00) [6]

повторюсь: используйте mutex'ы. они вроде уничтожаются при завершении создавшего их процесса...


Anatoly Podgoretsky   (2007-08-07 19:40:00) [7]

Мужики да вам witness сервер просто крайне необходим.


Leonid Troyanovsky   (2007-08-07 19:17:00) [8]


> Virgo_Style ©   (07.08.07 18:34) [20]

> .. но все равно метод несколько "через Париж в Мытищи",

Несколько это сколь?

--
Regards, LVT.


ASoft   (2007-08-07 18:46:00) [9]

грубо говоря, я имел в виду что-то на подобие

 if FileExists(FileName) then
   begin
    if not DeleteFile(FileName) then
     begin
       Application.MessageBox('too copy' ,'Run My prog',MB_ICONWARNING or MB_SYSTEMMODAL);
 //        Application.Terminate;
     end;
   end;
............
   CreateFile(PChar(FileName), GENERIC_READ or GENERIC_WRITE,
   FILE_SHARE_READ or FILE_SHARE_WRITE, nil,OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE, 0)
....


Virgo_Style   (2007-08-07 18:34:00) [10]

Virgo_Style ©   (07.08.07 18:31) [19]
Действительно, гораздо удобнее, в случае падения программы ручками надо не в реестр лезть, а всего лишь файл удалить.


Не разглядел "флаг на удаление после завершения", виноват... но все равно метод несколько "через Париж в Мытищи", imho.


Virgo_Style   (2007-08-07 18:31:00) [11]

ASoft   (07.08.07 17:42) [16]

Действительно, гораздо удобнее, в случае падения программы ручками надо не в реестр лезть, а всего лишь файл удалить.

p.s. Это - стеб.
p.p.s. http://rsdn.ru/article/baseserv/avins.xml- а это статья.


Leonid Troyanovsky   (2007-08-07 18:01:00) [12]


> Надежда   (07.08.07 15:37) [5]

> Окон в программе действительно нет. Есть моя программка,
>  перекачивающая данные из одного хранилища в другое. Работает
> нормально.

Если это не консольное приложение, то оно не получит уведомления,
например, о завершении сессии.
А если консольное, то его, все же, можно увидеть.

Проще всего, для начала, сделать ему окно (или форму)
хотя бы и невидимые.

--
Regards, LVT.


Leonid Troyanovsky   (2007-08-07 17:51:00) [13]


> Сергей М. ©   (07.08.07 15:39) [6]

> см., к примеру, GlobalAddAtom, GlobalFindAtom, GlobalDeleteAtom

Даже смотреть не стоит.

--
Regards, LVT.


ASoft   (2007-08-07 17:42:00) [14]

простое решение, создать файл, к примеру в \temp, с флагом на удаление после завершения приложения. При старте проверять его наличие..


MetalFan   (2007-08-07 17:04:00) [15]

mutex самое отличное решение имхо


Сергей М.   (2007-08-07 16:58:00) [16]


> Virgo_Style ©   (07.08.07 16:54) [11]


Это жестокийстёб)

Можно ли он в дан.случае ? Сомневаюсь)


Virgo_Style   (2007-08-07 16:56:00) [17]

l_v   (07.08.07 16:52) [10]
ну это же как вариант


По моему скромному мнению, плохой вариант еще можно предложить до хорошего, но никак не после)

P.S. На RSDN была целая статья на эту тему. Даже, кажется, с примером.


l_v   (2007-08-07 16:54:00) [18]


> Сергей М. ©   (07.08.07 16:49) [9]

спасибо за комплимент! первый раз меня называют богом... :)


Virgo_Style   (2007-08-07 16:54:00) [19]

Сергей М. ©   (07.08.07 16:49) [9]

Кто-то тут жаловался, что люди не понимают, где стеб, а где нет... не напомните, кто? %-))


l_v   (2007-08-07 16:52:00) [20]


> Virgo_Style ©   (07.08.07 16:47) [8]

ну это же как вариант, у вас постоянно все падает?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо