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