![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проверка не запущена ли уже эта программа [D7]
Надежда © (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]
ну это же как вариант, у вас постоянно все падает?