Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2003.11.17;
Скачать: [xml.tar.bz2];

Вниз

С завершением сервиса беда:(   Найти похожие ветки 

 
TALLA   (2003-07-16 00:18) [0]

С завершением сервиса беда:(
procedure TService1.ServiceStart(Sender: TService; var Started: Boolean);
begin
Form2.Show;
end;

procedure TService1.ServiceExecute(Sender: TService);
begin
while not Terminated do begin
sleep(50);
ServiceThread.ProcessRequests(true);
end;
end;

procedure TService1.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
Form2.Close;
end;

Форма не реагирует на свою кнопку закрытия (не отвечает).
При остановке сервиса вручную - Access Violation (с попыткой закрытия и без).

Не подскажете, где бы про сервисы под winXP почитать?
и желательно бы наглядный пример, взаимодействующий с экраном.


 
Lord Warlock   (2003-07-16 08:10) [1]

Может это не поможет, но пропробуй

ServiceThread.ProcessRequests(false);


 
Digitman   (2003-07-16 10:30) [2]

поскольку тред сервиса является дополнительным, а форма - непотокобезопасный визуальный контрол, то программные обращения к форме должны быть синхронизированы с осн.тредом приложения-сервиса.


 
TALLA   (2003-07-16 12:06) [3]

@Lord Warlock:
Не помогло
@Digitman:
А что конкретно изменить в коде для формы и сервиса?


 
Digitman   (2003-07-16 12:31) [4]


> TALLA

в форме ничего менять не нужно.
следует как-то синхронизировать обращения к методам/св-вам формы с осн.потоком сервис-процесса

беда в том что (по кр.мере - в D5) стандартный метод TThread.synchronize(VCLobject.method) является protected, и обратиться к нему иначе как из наследника TServiceThread не получится. А это означает, что выходов из ситуации как минимум два :
- декларировать и реализовать собственного наследника TServiceThread; это повлечет за собой изменение ориг.кода в модуле svcmgr.pas и его перекомпиляция (либо использование вместо svcmgr собственной ее копии с необходимыми доработками в части изменения всех обращений к стандартному TServiceThread на обращения к его наследнику);
- реализовать синхронизацию иными средствами; не лучший, но допустимый вариант - в событиях ServiceStart()/ServiceStop() создавать/уничтожать свой собственный thread, в контексте которого можно будет создать/уничтожить форму и обращаться к ее методам/св-вам с использованием доступного в этом случае метода synchronize()


 
clickmaker   (2003-07-16 17:14) [5]

беда в том что (по кр.мере - в D5) стандартный метод TThread.synchronize(VCLobject.method) является protected

а ежели так

TCrackedThread = class(TServiceThread);

TCrackedThread(ServiceThread).Synchronize


 
Digitman   (2003-07-17 08:18) [6]


> clickmaker © (16.07.03 17:14)


без переделки svsmgr.pas не получится.
ведь в нем создается экз-р именно TServiceThread, и ни о каких TCrackedThread этому модулю неизвестно.
первая же попытка выполнить приведение TCrackedThread(ServiceThread) вызовет исключение, ибо сервис-тред не имеет класс TCrackedThread


 
User81   (2003-09-08 12:29) [7]

для NT работает такой способ
На пример сервис называется MYSERVISE
то выполнить код
winexec ("net stop "MYSERVISE"",0);


 
clickmaker   (2003-09-08 12:37) [8]

Digitman © (17.07.03 08:18) [6]

> clickmaker © (16.07.03 17:14)

без переделки svsmgr.pas не получится.
ведь в нем создается экз-р именно TServiceThread, и ни о каких TCrackedThread этому модулю неизвестно.
первая же попытка выполнить приведение TCrackedThread(ServiceThread) вызовет исключение, ибо сервис-тред не имеет класс TCrackedThread


Так это же стандартный прием для кряка protected-методов. По крайней мере, с другими классами он работает. Почему же с этим не будет?


 
Digitman   (2003-09-08 12:59) [9]


> clickmaker


почему-почему)..

потому что НЕпеределанный модуль svsmgr.pas создает объекты класса именно TServiceThread ! А не его наследники)..



Страницы: 1 вся ветка

Форум: "Система";
Текущий архив: 2003.11.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.009 c
3-56481
Denisiy
2003-10-28 15:58
2003.11.17
TStoredProc - ошибку выдает... Чего не хватает


1-56658
Sectey
2003-11-05 10:24
2003.11.17
Компонент в рунтайме


11-56547
MMF
2003-02-27 11:14
2003.11.17
Подскажите как пользоваться TKOLTreeView.


4-56971
SergeySK
2003-09-08 23:32
2003.11.17
LogonUser, а что дальше?


3-56520
Шурик Ш
2003-10-27 17:13
2003.11.17
Sos me! Не понимаю, где ошибка...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский