![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите с сервисом [D7, WinXP]
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