Delphi 7 написание сервиса (службы)
Добрый день!
Пишу службу на Delphi 7 (ОС Windows 7), идея такова: идет таймер, в событиях таймера прописано, например: if timetostr(time)='02:00:00' then ... что-то делать. Службу компилировал, зарегистрировал, когда запускаю - пишет сразу что служба остановлена т.к. ей нечего делать. Конечно не сразу стал тут писать, загуглил, прочел что надо что-нибудь написать в процедуре ServiceExecute, но ни один из предложенных вариантов у меня не заработал. Пробовал писать в той процедуре следующее: 1. timer1.enabled=true (хотя изначально я это писал на процедуре старта) 2. ServiceThread.ProcessRequests(true); и false тоже 3. Разные вариации на тему while not Terminated do (так же таймер запускал, писал ServiceThread.ProcessRequests с true и false) 4. Пытался по-своему извращаться, присваивал какой-нить переменной какое-нить значение, даже проверки какие-то пытался писать в качестве заглушки. Результат один: при запуске службы она сразу же останавливается. Сразу говорю, дабы исключить ошибку в коде пробовал те же самые телодвижения делать в обычном приложении (не в службе) - и оно работает! Подскажите пожалуйста, как все-таки эту заразу заставить заработать? Спасибо! |
Приведите Ваш код. Весь.
|
Вот привожу код. Основные события должны были выполняться в TService1.Timer1Timer - на данный момент мне нужно чтоб строка записывалась в файлы для проверки работы службы, я думаю если я добьюсь того что оно начнет работать и писать в файл тогда можно будет и другие события добавлять.
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs, ExtCtrls, DB, ADODB; type TService1 = class(TService) Timer1: TTimer; adocon: TADOConnection; procedure ServiceStart(Sender: TService; var Started: Boolean); procedure ServiceExecute(Sender: TService); procedure Timer1Timer(Sender: TObject); procedure ServiceStop(Sender: TService; var Stopped: Boolean); private { Private declarations } public function GetServiceController: TServiceController; override; { Public declarations } end; var Service1: TService1; t:integer; f: textfile; cs: textfile; implementation {$R *.DFM} procedure ServiceController(CtrlCode: DWord); stdcall; begin Service1.Controller(CtrlCode); end; function TService1.GetServiceController: TServiceController; begin Result := ServiceController; end; procedure TService1.ServiceStart(Sender: TService; var Started: Boolean); var strcon:string; begin started:=true; t:=0; AssignFile(F, 'D:\Progs\test_service\test.txt'); AssignFile(cs, 'connectionstring.txt'); rewrite(f); reset(cs); read(cs, strcon); adocon.ConnectionString:=strcon; adocon.Connected:=true; timer1.Enabled:=true; end; procedure TService1.ServiceExecute(Sender: TService); //var a:byte; begin //while not Terminated do // a:=1; //timer1.Enabled:=true; //if timetostr(time)='00:00:00' then timer1.Enabled:=true; ServiceThread.ProcessRequests(true); end; procedure TService1.Timer1Timer(Sender: TObject); begin if timetostr(time)='16:10:00' then Writeln(f, 'õóé'); //t:=t+1; //if t mod 5 =0 then //begin // Writeln(f, 'õóé'); // showmessage('test'); // end; //if t>1000 then t:=0; end; procedure TService1.ServiceStop(Sender: TService; var Stopped: Boolean); begin closefile(f); closefile(cs); stopped:=true; end; end. |
Время: 14:05. |
Время: 14:05.
© OSzone.net 2001-