Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.012 c
1-75849
Flashas
2003-02-13 09:03
2003.02.24
Kak v Delphi sdelanoj programe sdelat Skin`y?......


6-76076
NewGuest
2003-01-01 16:29
2003.02.24
Конференция для всех людей работающих с сетью!


14-76088
Вадим
2003-02-09 17:47
2003.02.24
ИМХО


3-75762
DKalinin
2003-02-05 18:56
2003.02.24
как вызвать внешнюю функцию в InterBase


1-75888
Cranium
2003-02-13 12:18
2003.02.24
1c OLE сервер