![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Нормальное завершение системы. [D6, Win95/98, Win2k]
sniknik © (2002-12-24 20:37:00)Программа не дает себя закрыть, т.е стоит
procedure Form1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//какое либо условие
Action := caNone;
end;
но в таком варианте завершение системы (завершение работы виндовс) приводит к ошибке "невозможно закрыть приложение снять?", во всяком случае в 98-х. В 2000-х счас допишу и проверю :о)).
Вот и вопрос как различить нормальное закрытие программы (Alt-F4, Close, Х) от оповещения системы на закрытие? и соответственно нормально завершится (нужно закрыть потоки чтобы не было потом мучительно больно ... :) от потери данных ).
sniknik (2002-12-25 17:53:00) [1]INDY forever!!! :о)) переделал, все работает как надо.
sniknik (2002-12-25 13:54:00) [2]Проблема оказалась чуть сложнее чем я думал.
Rouse_ © (24.12.02 22:17)
прав NMUDP с закладки FastNet лутше не использовать (возможно и все компоненты, не пробовал), такое впечатление что он блок ставит месагам.
На тестовой форме (сначала с INDY -> IdUDPServer1) на FormClose завершение разрешаю по "условиям" + OR isOnEndSession, isOnEndSession "взводится" по событию WM_QUERYENDSESSION (результ 1 как в хелпе прописано). Все работает, как положено завершение системы видит из проги выходит продолжает перезагрузку.
Но стоило заменить IdUDPServer1 на NMUDP, все, лафа кончилась, FormClose после WM_QUERYENDSESSION не наступает, чего только не делал и сам форму закрывал и событие транслировал. Программа закрывается (когда сам Close делаю) но и перезагрузка прерывается. :-(( тоже нехорошо.
(кстати мой запасной вариант (sniknik © (24.12.02 22:29)) с ним тоже так работает завершает программу но прерывает перезагрузку)
В общем помучился я недолго и решил, не так уж много переделывать. :о)), пусть будет INDY. Обойти ситуацию оставив в использовании NMUDP наверно можно, но доверие он у меня теперь потерял. :-)) так дойду и до писания всего исходного кода по совету Rouse_.
Спасибо всем. Долго бы я соответствия в энтих граблях искал, если бы не форум.
sniknik (2002-12-25 08:28:00) [3]Rouse_ © (24.12.02 22:58)
c ИНДИ конечно попробую, вряд ли буду переделывать, пока работает но для самообразования. А вот писать самому времени нет :-) (и лень). Так и лежит недописанный на основе модуля winsock, работает но с глюками (в KOL нет UDP а мне нужно вот и пытался). Но это ладно уменьшение размера не первостепенная важность. В 2000 да не завершает вообще, но в 98 неправильно снятием задачи не оченьто устраивает. А с заказчиками нужно построже, договор, описание обязаностей, ограничений ... т.д. :-) хотя прав всякие бывают (на нас одни даже в суд подавали! вовремя остановили, их адвокат отговорил в связи с необоснованностью требований. но это отдельная тема).
Anatoly Podgoretsky © (24.12.02 22:59)
Да посмотрел в хелпе описание, лутше не придумаеш (это я про WM_QUERYENDSESSION), специальное оповещение на закрытие виндовой сессии чего уж лутше только я его не знал :-(. догадывался что должно быть чтото подобное но ... И пользователь у меня может не только задание снять но завершится (мало ли какие причины), надо только вручную все задания завершить, но это можно только администратору и это осмысленныедействия, как и снятие задания из диспечера, вот ещебы и оттуда его только админ мог. но тоже ладно тем более уже есть планы совсем переделать, перенести рабочую часть в сервис тогда закрытие управляющей программы ничего не испортит. (у меня уже и наброски есть нужно только решение и время) а с этой уже решаю только текушие проблемы. проблема цто вызвали уже в 3-й раз ктото закрыл программу на сервере (именно закрыл у меня лог есть) а проверить и запустить обратно немогут :-)) вот ведь закрыть ума хватает, а когда звонят не знают даже где и что такое сервер. :-)) ну и решил совсем запретить закрытие при работающих заданиях но столкнулся с граблями на завершении системы, к вечеру с вашей помошью думаю и от них избавится :о)).
Anatoly Podgoretsky (2002-12-24 22:59:00) [4]Тогда действительно WM_QUERYENDSESSION достаточно, и другое не придумать для запрета, конечно пользователь может снять задание, но это особые действия
Rouse_ (2002-12-24 22:58:00) [5]Забыл про ветку, заболтался в асе с Геннадием, сорри. Идея какая, почемуто вышеназванные компоненты не дают системе перезагрузится нормально. Глюк наблюдается только под НТ, под 98 все спок. За неимением исходников предположения высказать не могу, но я неоднократно описывал данный подводный камень в форумах. Советую либо писать самому, либо использовать ИНДИ, ибо их глюкавость менее спокойная. НО!!! Как я неоднократно повторялся, пишите весь исходный код сами, так Вы будете контролировать всю логику программы. Мне приходится делать именно так, так как мои заказчики не понимают слов - несовместимость систем или отсутствие библиотек. Надеюсь Вы на таких пока не нарвались :)
Желаю успехов
sniknik (2002-12-24 22:35:00) [6]Спасибо. Результат завтра, что получится.
Song (2002-12-24 22:30:00) [7]2sniknik © (24.12.02 22:29)
WM_QUERYENDSESSION
sniknik (2002-12-24 22:29:00) [8]Song © (24.12.02 20:54)
именно! перезагрузка либо выключение. а прогу предварительно не вырубили (и скорей всего никто этим не озаботится).
Anatoly Podgoretsky © (24.12.02 21:01)
не дать изерам выключить программу (естественно), а то даже трехэтажные предупреждения их не останавливают (они их даже не читают :( ), а программа ловит посылки по сети и пишет в базу (единственное оправдание неприхода, выключен сервер).
Rouse_ © (24.12.02 22:17)
да NMUDP, а что заметно? :-) и в чем прикол этих компонент? в смысле по какому признаку вычислил?
как запасной вариант придумал такое (в метро делать нечего). делаю форму невидимой (показ иконки в трэй) и в таком состоянии когда ни от каких контролов завершения не ожидается считаем любое системным. и завершаемся.
Rouse_ (2002-12-24 22:17:00) [9]Давайка угадаю, компоненты c закладки FastNet используешь?
Желаю успехов
Anatoly Podgoretsky (2002-12-24 21:01:00) [10]Лучше говорить почему такое рещение сделано, тогда легче расмотреть другие варианты
Song (2002-12-24 20:54:00) [11]закрыть когда перезагрузка или ещё что?