Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.17;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.027 c
1-56586
Дельфин
2003-11-06 05:53
2003.11.17
Создание собственных компонентов в DELPHI 6


14-56848
SageDragon
2003-10-27 16:34
2003.11.17
Построение полной карты сайта


14-56900
Ertong
2003-10-25 15:44
2003.11.17
Задача (физика)


3-56446
Kinder
2003-10-28 20:01
2003.11.17
ошибка Update где?


3-56451
Belkova
2003-10-30 08:11
2003.11.17
DBLookupComboBox