Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.49 MB
Время: 0.046 c
6-1182092002
Степан
2007-06-17 18:53
2008.03.09
Узнать название подключения по IP


15-1202111721
Valentina_HR
2008-02-04 10:55
2008.03.09
поомгите найти программиста Delphi!!! (Санкт-Петербург)


2-1202575224
Master_Of_Puppets
2008-02-09 19:40
2008.03.09
Снова о TreeView. Проблемы с корнем.


15-1201692685
VAD*Anti Gopn!k
2008-01-30 14:31
2008.03.09
Задача с областной олимпиады.


15-1201840674
Ивриил
2008-02-01 07:37
2008.03.09
Может ли бог так разогреть курицу, что не сможет ее съесть?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский