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

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

Ошибки при запуске сервиса [D6, WinXP]


Страницы:   1 2

Slaga ©   (2006-01-11 11:21:00) 

Такая проблема, написал такой сервис который запускает некое предложение как:

Application.CreateForm(TDM, DM);
if DM.OracleSession.Connected then
 begin
  Application.CreateForm(TfmMain, fmMain);
  try
   fmMain.ShowModal; //Открытие формы
   fmMain.acStartServer.Execute;// Запуск работы
  except
   on E:Exception do
    begin
     ShowMessage(E.Message);
     fmMain.Close;
    end;
  end;
 end;


при запуске сервиса как start ScaleSrvSrv.exeвсе работает, но если его запускать через Службы-Запуск, то вроде тоже запускается но через определенный таймаут выдает ошибку:

Не удалось запустить службу Scale Server Service на Локальный компьютер.

Ошибка 1053: Служба не ответила на запрос своевременно.


Подскажите пожалуйста в чем может быть дело.


slaga   (2006-01-12 10:13:00) [1]

Нет нужды, так как все уже реализовано в первоначальной программе, для которой и пишется сервис, причем программа эта нужна как в виде сервиса так и в виде простого приложения.


Digitman   (2006-01-12 08:48:00) [2]


> Execute порождает отдельные потоки в которых и выполняется
> основная работа


а что, использовать для "основной работы" доп.поток самого сервиса нет возможности ?


slaga   (2006-01-11 18:38:00) [3]

Дело в том что  fmMain.acStartServer.Execute порождает отдельные потоки в которых и выполняется основная работа, так что как долго он выполняется не имеет значения.

А насчет останова:

procedure TScaleServerService.ServiceStop(Sender: TService;
 var Stopped: Boolean);
begin
fmMain.acStopServer.Execute;
fmMain.free;
DM.Free;
end;

procedure ServiceController(CtrlCode: DWord); stdcall;
begin
 ScaleServerService.Controller(CtrlCode);
end;

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


Digitman   (2006-01-11 18:32:00) [4]

и как долго у тебя исполняется вызов метода fmMain.acStartServer.Execute ?

как вообще твой сервис реагирует на команду останова ?


slaga   (2006-01-11 18:24:00) [5]

в OnExecute ничего не происходит


Digitman   (2006-01-11 18:14:00) [6]


> fmMain.Show;


> ShowMessage(


в контексте доп.трэда это недопустимо !

а что, собственно, творится в OnExecute ?


slaga   (2006-01-11 18:10:00) [7]

ну вот что сейчас реально у меня есть:

procedure TScaleServerService.ServiceStart(Sender: TService;
 var Started: Boolean);
var
 NeedToUninitialize: Boolean;
begin
  NeedToUninitialize := Succeeded(CoInitialize(nil));
try
  Started := True;
  try
   Application.CreateForm(TDM, DM);
   if DM.OracleSession.Connected then
    begin
     Application.CreateForm(TfmMain, fmMain);
     try
      fmMain.acStartServer.Execute;
      fmMain.Show;
     except
      on E:Exception do
       begin
        ShowMessage('Ïðîèçîøëà îøèáêà çàïóñêà ñåðâèñà ScaleSrvSrv: '+E.Message);
        fmMain.Close;
       end;
     end;
    end;
  except
   on E:Exception do
    ShowMessage('Ïðîèçîøëà îøèáêà çàïóñêà ñåðâèñà ScaleSrvSrv: '+E.Message);
  end;
finally
 if NeedToUninitialize then CoUninitialize;
end;
end;


Digitman   (2006-01-11 18:00:00) [8]


> чем собственно не нравится  Show


Мне не нравится твое утверждение, что после переноса тобой упомянутого изначально кода (хоть с Show хоть с SowModal - безразлично) в обработчик OnStart у тебя "все нормально".


Digitman   (2006-01-11 17:57:00) [9]


> slaga ©   (11.01.06 17:53) [19]


Значит горбатого лепишь : не переносил ты ни ShowModal ни Show в OnStart


slaga   (2006-01-11 17:57:00) [10]

а чем собственно не нравится  Show ?


slaga   (2006-01-11 17:53:00) [11]

:))

да нет, на самом деле все нормально, сервис работает и сервер работает


Digitman   (2006-01-11 17:38:00) [12]


> поменял на Show


хрен редьки не слаще


slaga   (2006-01-11 17:32:00) [13]

нет, я его поменял на Show


Digitman   (2006-01-11 17:07:00) [14]

что, и ShowModal туда переместил ?
это недопустимо


slaga   (2006-01-11 17:05:00) [15]

ну вот исходя из этого я все переместил в ОнСтарт/ОнСтоп


Digitman   (2006-01-11 16:58:00) [16]


> slaga ©   (11.01.06 16:52) [13]


"светлые мысли" должны базироваться на одном весьма важном факте : обработка событий TService.OnCreate/OnDestroy выполняется в контексте осн.трэда процесса сервиса, в то время как обработка любых прочих событий TService - в контексте дополнительного трэда


slaga   (2006-01-11 16:52:00) [17]

:)

ну это по ходу обсуждения меня посещали более светлые мысли


Digitman   (2006-01-11 16:46:00) [18]


> описанное выше вызывается в TService в событии ServiceCreate


противоречие наблюдается :

с одной стороны

> описанное выше вызывается в TService в событии Service Create


с другой


> при Он Стартесервиса, у меня создается и запускается в работу
> мой сервер


и в том и в другом случае речь идет якобы о "запуске работы сервера"

"Как понимать тебя, Саид ?" (с) Черный Абдула


Eraser   (2006-01-11 16:22:00) [19]


> Digitman ©   (11.01.06 12:01) [5]
>
> Это не так делается.
> Пишется отдельно приложение-сервис и отдельно GUI (или консольное)
> приложение-монитор для контроля/управления работой сервиса.
>
....


> slaga ©

Ещё, как особо изощрённый вариант, чтобы не делать 2 exe файла, можно этот "монитор" сделать в составе exe сервиса, чтобы при запуске программы, как обычного приложения, запускалась только "мониторная" часть.


slaga   (2006-01-11 15:57:00) [20]

как было дело ...

Изначально была написана прогу, которая должна была работать как некий сервер, потом нужно было сделать сервис под этот сервер, вот я и сделал сервис как надстройку над сервером.

Теперь получается что при ОнСтарте сервиса, у меня создается и запускается в работу мой сервер.

Вот так вот.


Страницы:   1 2

Наверх

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