Форум: "Начинающим";
Текущий архив: 2006.05.14;
Скачать: [xml.tar.bz2];
ВнизЧто не так с сервисом ? Найти похожие ветки
← →
KyRo (2006-04-26 15:50) [0]Я инсталирую в систему сервис в коде которого я запускаю таймер и
каждю секуеду єтот таймер должен добовлять в файл одну строчку.
Но дело в том что добавляет он толькопосле того как я зарегестрировал сервис и до тогого времени пока я не нажал ок в диалоговом окне которое выдает виндовс после удачной регистрации.{Создаем новый клас сервиса}
TClientService = class(TService)
protected
Timer:TTimer;
procedure Start(Sender: TService; var Started: Boolean);
procedure Stop(Sender: TService; var Stopped: Boolean);
Procedure TimerWork(Sender: TObject);
public
function GetServiceController: TServiceController; override;
constructor CreateNew(AOwner: TComponent; Dummy: Integer = 0); override;
end;
var
Service: TClientService;
{ TClientService }
// Создаем экземпляр класса
Constructor TClientService.CreateNew(AOwner: TComponent; Dummy: Integer);
begin
inherited CreateNew(AOwner, Dummy);
AllowPause := False;
DisplayName := SApplicationName;
Name := SServiceName;
OnStart := Start;
OnStop := Stop;
Timer:=TTimer.Create(self);
Timer.Interval:=1000;
Timer.OnTimer:= TimerWork;
end;
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
Service.Controller(CtrlCode);
end;
function TClientService.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;
// Старт сервиса
procedure TClientService.Start(Sender: TService; var Started: Boolean);
begin
Started := True;
{ Timer:=TTimer.Create(self);
Timer.Interval:=1000;
Timer.OnTimer:= TimerWork;}
end;
// Остановка сервиса
procedure TClientService.Stop(Sender: TService; var Stopped: Boolean);
begin
Stopped := True;
// Timer.Enabled:=False;
end;
procedure TClientService.TimerWork(Sender :TObject);
var
F:TextFile;
begin
// Timer.Enabled:=False;
assignFile(f,"1.txt");
reset(f);
append(f);
WriteLn(f,"1");
CloseFile(f);
//ShowMessage("1");
// Timer.Enabled:=True;
end;
begin
if AlreadyRunning then Halt;
if IsInstalling or IsStartService
then
begin
Service := TClientService.CreateNew(SvcMgr.Application, 0);
Application.Initialize;
Application.Run;
end
else
begin
Service := TClientService.CreateNew(SvcMgr.Application, 0);
Application.Initialize;
Application.Run;
end;
Это код .
Подскажите из за чего это может быть ?
← →
Сергей М. © (2006-04-26 16:05) [1]Галиматья какая-то ...
Ты шаблон сервис-приложения использовал ?
← →
KyRo (2006-04-26 16:08) [2]
> Сергей М. © (26.04.06 16:05) [1]
> Галиматья какая-то ...
>
> Ты шаблон сервис-приложения использовал ?
> <Цитата>
да
Согласен там некоторые куски не надо . Но суть не в этом почему после того как я стартую сервис у меня не запускается таймер
← →
Сергей М. © (2006-04-26 16:19) [3]begin
if AlreadyRunning then Halt;
if IsInstalling or IsStartService
then
begin
Service := TClientService.CreateNew(SvcMgr.Application, 0);
Application.Initialize;
Application.Run;
end
else
begin
Service := TClientService.CreateNew(SvcMgr.Application, 0);
Application.Initialize;
Application.Run;
end;
Это что за отсебячина ?
← →
KyRo (2006-04-26 16:22) [4]это поверка запущен сервис или нет .
Вообще полный текст не переделаного шаблона лежит тут
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=21422
← →
Сергей М. © (2006-04-26 16:52) [5]
> это поверка запущен сервис или нет
И кому это интересно ?
← →
KyRo (2006-04-26 17:25) [6]Честно говоря не знаю .
Я пока тока разбираюсь в этом шаблоне и ранее сервисы я не писал
по этому могу задовать глупые вопросы.
Дело в том что когда я его регистрирую то виндовс выдает сообщение
Service install sucsesful ! и кнопочка ок и вот до тех пор пока я не нажму эту кнопочку ок сервис работает и таймер тоже.
Тоже самое когда я разрегистрирую сервис из системы то тоже виндовс выдает сообщени и пока я снова не нажму ок то таймер работает.
А вот если я перезапускаю сервис или просто стартую его тогда таймер не включается.
Вот меня и интересует может у меня нет какого то обработчика на событие которое происходит при старте сервиса ?
← →
Рамиль © (2006-04-26 18:30) [7]Почитай лучше в справке по Delphi. TServiceApplication. Там и пример нормальный есть.
← →
KyRo (2006-04-26 18:42) [8]А у кого нибуть может есть какой нибуть исходник с описанием , потому что в хелпе там сразу какой то поток и сокеты мне надо сначала просто что бы
сервис зпустился и каждую секунду срабатывал таймер .
← →
Eraser © (2006-04-26 18:56) [9]
> KyRo (26.04.06 18:42) [8]
см. событие OnExecute и используй не таймер, а Sleep(1000) в цикле того самого события.
← →
Сергей М. © (2006-04-27 08:43) [10]
> просто что бы
> сервис зпустился и каждую секунду срабатывал таймер
При событии OnStart создаешь объект-таймер, инициализируешь его и запускаешь, при событии OnStop уничтожаешь объект-таймер.
В обработчике OnExecute пишешь
while not Terminated do
ProcessRequests(True);
← →
palva © (2006-04-27 08:52) [11]Давайте я попробую ответить на вопрос.
Когда вы инсталлируете сервис, сам сервис не должен выполняться. Выполняется его небольшая часть, которая обеспечивает установку сервиса. Эта часть не должна работать, когда работает сам сервис. Видимо ваш код попал именно в эту часть.
← →
Сергей М. © (2006-04-27 10:52) [12]
> поверка запущен сервис или нет
Факт запуска процесса сервис-приложения не есть факт "запуска сервиса".
← →
KyRo (2006-04-27 11:43) [13]
> OnExecute
А это событие TService ?
> Давайте я попробую ответить на вопрос.
> Когда вы инсталлируете сервис, сам сервис не должен выполняться.
> Выполняется его небольшая часть, которая обеспечивает установку
> сервиса. Эта часть не должна работать, когда работает сам
> сервис. Видимо ваш код попал именно в эту часть.
Ну вообщем то да я создаю таймер в конструкторе
но когда я пытался создовать его в Start тогда сервис почему то зависал
Вообщем буду пробовать
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.05.14;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.02 c