Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1145751737
parovoZZ
2006-04-23 04:22
2006.05.14
dll и экспортируемые функции


15-1145276478
Yanis
2006-04-17 16:21
2006.05.14
Хочу так же


3-1143109093
spogi
2006-03-23 13:18
2006.05.14
Oshibka v konvertacii deneg v valyuti


11-1126175496
GMax
2005-09-08 14:31
2006.05.14
TKOLDateTimePicker mck errors


15-1145471256
LexxX
2006-04-19 22:27
2006.05.14
Локализация "утечки" памяти





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский