Форум: "KOL";
Текущий архив: 2008.03.09;
Скачать: [xml.tar.bz2];
ВнизЗапуск Апплета через сервис Найти похожие ветки
← →
Vladimyr © (2007-07-21 11:42) [0]Всем привет, нужет совет по поводу того, как устроен Апплет.
Задача состоит в том, чтобы работающий сервис запускал Апплет каждый раз, когда юзер входит в сеанс Винды (logon).
И всё вроде бы хорошо работает, но только первый раз, т.е. при старте сервиса.
После операции logoff-logon сервис пытается запустить Апплет, но вылетает в момент выполнения "NewForm" (отладка данного момента, как вы понимаете, весьма проблематична).
В общих чертах устройство программы таково:
1. Сервис запускается и постоянно шуршит в фоне;
2. При запуске сервиса или отлове сообщения WM_TaskbarCreated запускается отдельный процесс, примерно устроенный так:Applet := NewApplet ("zzz");
NewF1Form (F1Form, Pointer (Applet)); // Здесь вылет
Applet.AllBtnReturnClick;
Applet.Visible := false;
AppletRunning := true;
AppletTerminated := false;
run (Applet);
Если же не создавать форму вторично, то вылет происходит в момент обращения к компонентам формы (что логично, так как всё уничтожено во времы предыдущего logoff"а).
Как же мне добиться того, чтобы после logoff и последующего logon Апплет запустился во второй раз?!
← →
Vladimir Kladov (2007-07-22 19:59) [1]Разве в сервисе нельзя отловить событие logoff/login?
← →
Vladimyr © (2007-07-22 23:14) [2]Разумеется, можно! С этим проблем нет.
> После операции logoff-logon сервис пытается запустить Апплет, но вылетает в момент выполнения "NewForm"
← →
Дмитрий К © (2007-07-22 23:27) [3]
> но вылетает в момент выполнения "NewForm"
Ошибка в NewForm?
← →
Vladimir Kladov (2007-07-23 17:53) [4]Наверное, надо ApletTerminated присвоить false.
← →
Vladimyr © (2007-07-23 19:24) [5]Владимир, я ценю Ваше желание помочь, но прочитайте, наконец, сам вопрос! :)
>AppletTerminated := false;
Дмитрий К, ошибки в NewForm нет, в первый раз все отлично запускается (см. 3-ю строку вопроса)
> всё вроде бы хорошо работает, но только первый раз
2all: правильно ли я поступаю в принципе, запуская Апплет таким образом?
← →
Vladimir Kladov (2007-07-23 20:01) [6]Буквы мелкие, не узрил. А как он убивается, сам? Посмотрите на демо с вызовом формы KOL из приложения VCL, принцип примерно должен быть тот же. Там Applet еще и убивается.
← →
Vladimyr © (2007-07-23 21:01) [7]Владимир, Вы имеете в виду "Пример вызова модальной формы MCK из проекта VCL"?
Изучил. Обнаружил следующие отличия:
там -NewForm1 (Form1, Applet)
,
у меня -NewForm1 (Form1, Pointer (Applet))
Вроде никакой разницы.
Т.е. в первый раз всё запускается, при логоффе Апплет завершает работу, при следующем логоне смотришь - сервис остановлен. Если не делать NewForm, то сервис продолжает работать, но как тогда работать с формой?!
Остались вопросы:
1. Нужно ли руками убивать Апплет про логоффе и воссоздавать при логоне?
Или же он переживёт логофф и всё будет ок?
2. Переживёт ли логофф форма?
3. Как же надо запускать Апплет после логоффа, чтобы он запустился? (будь он неладен)
← →
Vladimir Kladov (2007-07-23 21:40) [8]В конце же написано:
Applet.Free;
Applet := nil;
AppletTerminated := FALSE;
Не зря ведь написано. попробовать - что мешает?
← →
Vladimyr © (2007-07-23 22:24) [9]Владимир, о чём Вы?!
Во всём проекте DemoModalVcl2kolDll нет ни одного упоминания "AppletTerminated"! Или я не туда смотрю?
Попробовал вставить эти строки после выполнения логофф.
Поведение программы не изменилось.
Ладно, сейчас сварганю тестовый проект с голой формой, буду экспериментировать...
← →
Vladimyr © (2007-07-23 22:46) [10]Вот это фокус!!!
Начал втыкать в NewForm ("Project1_1.inc") операторbeep (1000, 400)
, чтобы определить, в каком месте происходит вылет (изврат, но ничего лучше не придумал :)
И вот... при очередном втыкании (как раз перед присваиванием значений обработчикам OnMessage и т.п.) ... всё заработало!!! %-]
То есть: втыкаю биип - Апплет нормально запускается после логоффа сколько хочешь. Убираю биип - сервис вылетает. МИСТИКА!!!
← →
GMax (2007-07-23 23:06) [11]в порядке эксперимента - sleep(xx) не поможет ли ?
← →
Vladimir Kladov (2007-07-24 15:42) [12]DemoVCL2KOLDll.zip я его правил недавно, там точно было.
← →
Vladimyr © (2007-07-24 20:21) [13]2 GMax: Как ни странно, нет. Да и beep помогает через раз :(
2 Vladimir: Скачал, проверил. Ни на что не влияет :(
← →
Vladimir Kladov (2007-07-24 21:07) [14]Значит, не надо в ответ на то сообщение, которое вы ловите. Видимо, в этот момент ещё рано. Поищите более позднее событие. Может быть, стоит по таймеру поотлавливать наличие определённого окна. (Я вообще подозреваю, что облом из-за того, что ещё не создано окно рабочего стола, и Applet соответственно не может ни к чему природниться. Хотя это только мои домыслы).
← →
Vladimir Kladov (2007-07-24 21:09) [15]и насчёт "таймера" - это я тоже не совсем про таймер. В общем в том месте, где регулярно приходят сообщения, проверяя к примеру, чтобы после последней проверки прошло больше скажем 10 мс, выполнять проверку, если еще не создан.
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2008.03.09;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.042 c