Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите с сервисом [D7, WinXP]


Страницы:   1 2

serg111111 ©   (2006-03-16 10:24:00) 

Привет умники и умницы :).
Создал сервис как File->New->Other->ServiceApplication, но незнаю как написать обработчик, который проверял бы заланное время с текущим и вслучае совпадения выполнял определенную операцию!


Сергей М.   (2006-03-16 15:46:00) [1]

За надом.

Иначе будут проблемы (их ты, вероятно. уже имеешь) с оконными сообщениями.

TTimer как раз и использует этот механизм.


serg111111   (2006-03-16 15:38:00) [2]

А зачем связывать сервис с рабочим сталом?


Сергей М.   (2006-03-16 14:43:00) [3]


> КАк?


Каком кверху.

Свойства сервиса в том самом сервис-менеджере разглядывал хоть раз ?


serg111111   (2006-03-16 14:37:00) [4]

->Да, и не забудь (важно !) установить для своего сервиса опцию взаимодействия с раб.столом.
->КАк?


Сергей М.   (2006-03-16 14:34:00) [5]

Ну а раз работает, то средствами встр.отладчика лови брейкпойнт

procedure TMyService.TimerProc(Sender: TObject);
begin //<-- здесь
..

а дальше средствами того же пошагово проверяй, что там у тебя не слава богу ..

По поводу особенностей трассировки/отладки Делфи-сервисов читай станд.справку на тему "Debugging service applications"/

Да, и не забудь (важно !) установить для своего сервиса опцию взаимодействия с раб.столом.


serg111111   (2006-03-16 14:20:00) [6]

В состоянии написано, что он работает!


Сергей М.   (2006-03-16 14:17:00) [7]


> нажал на кнопочку Play


Так ..

И что ты увидел при этом ?

На основании чего ты посчитал что твой сервис успешно стартовал ?


serg111111   (2006-03-16 14:12:00) [8]

запустил службу Мой компьютер->Управление->Службы и нажал на кнопочку Play


Сергей М.   (2006-03-16 14:10:00) [9]


> serg111111   (16.03.06 14:07) [15]


Это ты его только инсталлировал.
А стартовал-то ты его как ?


serg111111   (2006-03-16 14:07:00) [10]

Пишу ->myservice.exe /install
Выходит сообщение->SERVICE INSTALLED SUCCESSFULLY


Сергей М.   (2006-03-16 13:54:00) [11]

Ну и ?

Что показывает Service Manager ? Сервис стартует успешно ?


serg111111   (2006-03-16 13:46:00) [12]

myservice.exe /install


Сергей М.   (2006-03-16 13:04:00) [13]


> он почему-то не делает то, что я его прошу


Сервис-то инсталлировал как положено ?


serg111111   (2006-03-16 12:30:00) [14]

Но он почему-то не делает то, что я его прошу!
вот весь код сервиса!
unit myservis;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,
 ExtCtrls;

type

 Tmyservice = class(TService)
   procedure ServiceStart(Sender: TService; var Started: Boolean);
   procedure ServiceStop(Sender: TService; var Stopped: Boolean);
 private
 ftimer:ttimer;
  procedure TimerProc(Sender: TObject);
     { Private declarations }
 public
   function GetServiceController: TServiceController; override;
           { Public declarations }
  end;

var
 myservice: Tmyservice;
 var f:textfile;
implementation

{$R *.DFM}
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
 myservice.Controller(CtrlCode);
end;

function Tmyservice.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;

procedure Tmyservice.TimerProc(Sender: TObject);
begin
assignfile(f,'log.txt');
append(f);
if datetostr(date)='16.03.2006' then
writeln(f,'good');
closefile(f);
end;
procedure Tmyservice.ServiceStart(Sender: TService; var Started: Boolean);
begin
FTimer := TTimer.Create(nil);
FTimer.Interval := 1000;
FTimer.OnTimer := TimerProc;
FTimer.Enabled := True;
Started := True;
end;

procedure Tmyservice.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
FTimer.Free;
Stopped := True;
end;

end.


Сергей М.   (2006-03-16 12:19:00) [15]


> Т.е что-то в виде эго


кто такой "эго" ?)

procedure Tmyservice.ServiceStart(Sender: TService; var Started: Boolean);
begin
 ..прямо здесь реализуй вышеупомянутую работу с таймером
end

procedure Tmyservice.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
 .. и здесь тоже самое
end;


serg111111   (2006-03-16 12:15:00) [16]

Т.е что-то в виде эго-
procedure Tmyservice.ServiceStart(Sender: TService; var Started: Boolean);
begin
myServiceStart;
end;

procedure Tmyservice.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
MyServiceStop;
end;


Сергей М.   (2006-03-16 12:10:00) [17]


> serg111111   (16.03.06 11:53) [7]


Ну как ты обычно назначаешь обработчики ? Скажем, обработчик OnCreate какой-либо формы в обычном приложении ? Точно так же и здесь, только вместо формы здесь выступает модуль данных сервиса, созданный сервис-экспертом при создании "заготовки" проекта сервиса ..

Выделяешь мышом окно этого модуля (класс TService есть прямой наследник класса TDataModule, а класс твоего сервиса TMyService как прямой наследник класса TService при этом является непрямым наследником класса TDataModule), переходишь в окно Инспектора Объектов, в закладке Events видишь там кучу событий, в числе которых есть OnStart и OnStop, делаешь мышом даблклик на каждом из них - в рез-те в юните твоего сервиса появляются декларации соотв.методов и корректные "заготовки" их реализации ...


serg111111   (2006-03-16 11:53:00) [18]

>>MyServiceStart, назначенный тобой в кач-ве метода-обработчика этого события.
А как это сделать?


Сергей М.   (2006-03-16 11:48:00) [19]


> как вызвать событие ONstart


Никак.

Событие не вызывается, оно возбуждаетсякем/чем-либо.
В данном случае при старте сервиса (например, средствами стандартной консоли управления сервисами) как раз и будет возбуждено это событие, в рез-те чего будет вызван метод MyServiceStart, назначенный тобой в кач-ве метода-обработчика этого события.

Со стопом сервиса все точно так же выглядит.


serg111111   (2006-03-16 11:41:00) [20]

Сергей помоги, как вызвать событие ONstart


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо