Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Delphi 7 написание сервиса (службы) (http://forum.oszone.net/showthread.php?t=275135)

JaRule 03-01-2014 19:10 2282632

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. Пытался по-своему извращаться, присваивал какой-нить переменной какое-нить значение, даже проверки какие-то пытался писать в качестве заглушки.
Результат один: при запуске службы она сразу же останавливается. Сразу говорю, дабы исключить ошибку в коде пробовал те же самые телодвижения делать в обычном приложении (не в службе) - и оно работает!
Подскажите пожалуйста, как все-таки эту заразу заставить заработать? Спасибо!

Iska 03-01-2014 21:18 2282679

Приведите Ваш код. Весь.

JaRule 05-01-2014 15:48 2283350

Вот привожу код. Основные события должны были выполняться в 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-