Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.03.23;
Скачать: CL | DM;

Вниз

непойму в чем дело с сервисом   Найти похожие ветки 

 
Dmitry_177   (2007-07-25 17:51) [0]

Создал свой сервис на API, все работало, запускалось и т.д.. тут я внес в него небольшие изменеия, которые на запуск сервиса вообще не влияют.. и тут он нистого ниссего перестал работать, компилиться то он компилится, а не запускается через управление компьютером.. решил проверить, выкинул из кода абсолютно все кроме запуска сервиса, и всеравно такая же ерунда:


program KLServer;

uses
 Windows,
 WinSvc;

const
 ServiceName      = "MyService";

var
 DispatchTable: array [0 .. 1] of SERVICE_TABLE_ENTRYA;
 ServiceStatus: SERVICE_STATUS;
 hServiceStatus: SERVICE_STATUS_HANDLE;

procedure ServiceCtrlHandler(dwControl: DWORD); stdcall;
begin
   case dwControl of
     SERVICE_CONTROL_STOP: ServiceStatus.dwCurrentState := SERVICE_STOPPED;

     SERVICE_CONTROL_INTERROGATE: ;
   end;

 if not SetServiceStatus(hServiceStatus, ServiceStatus) then
   Exit;
end;

procedure ServiceProc(dwArgc: DWORD; var lpszArgv: array of PChar); stdcall;
begin
 hServiceStatus := RegisterServiceCtrlHandler(ServiceName, @ServiceCtrlHandler);
 if hServiceStatus = 0 then
   Exit;

 with ServiceStatus do
   begin
     dwServiceType := SERVICE_WIN32_OWN_PROCESS;
     dwCurrentState := SERVICE_START_PENDING;
     dwControlsAccepted := SERVICE_ACCEPT_STOP or SERVICE_ACCEPT_SHUTDOWN;
     dwWin32ExitCode := ERROR_SERVICE_SPECIFIC_ERROR;
     dwServiceSpecificExitCode := 0;
     dwCheckPoint := 0;
     dwWaitHint := 0;
   end;

 if not SetServiceStatus(hServiceStatus, ServiceStatus) then
   Exit;

 ServiceStatus.dwCurrentState := SERVICE_RUNNING;
 ServiceStatus.dwWin32ExitCode := NO_ERROR;

 if not SetServiceStatus(hServiceStatus, ServiceStatus) then
   Exit;

 while ServiceStatus.dwCurrentState = SERVICE_RUNNING do
   begin

   end;
end;

begin
 DispatchTable[0].lpServiceName := ServiceName;
 DispatchTable[0].lpServiceProc := @ServiceProc;

 DispatchTable[1].lpServiceName := nil;
 DispatchTable[1].lpServiceProc := nil;

 StartServiceCtrlDispatcher(DispatchTable[0]);
end.


И еще странная особенность, например вот тут: DispatchTable[0].lpServiceName := ServiceName; это после слова begin, стираю и потом заново ставлю точку, подсказка не выскакивает, хотя в той же ServiceProc все нормально, все выскакивает.. попробовал поставить прерывание на ServiceProc, и запустить через Run, оно не срабатывает..

может что с delphi случилось? может она глючит? хотя я и комп пробовал перезагрузить и delphi перезапустить..


 
Dmitry_177   (2007-07-25 18:57) [1]

ооооооччччееееннньььь странно... домой пришел все работает.. значит это на самом деле из за delphi?


 
Dmitry_177   (2007-07-25 19:49) [2]

неужели никто не знает??? почему дома все нормально работает, а на работе нет???


 
Сергей М. ©   (2007-07-26 09:19) [3]


> попробовал поставить прерывание на ServiceProc, и запустить
> через Run, оно не срабатывает


И не сработает.

Читай справку по теме "Debugging service applications".


 
Dmitry_177   (2007-07-26 09:26) [4]

Сергей М., ок, но всеравно полюбому чето не то... как я уже писал, вчера пришел домой с работы, код вообще не трогал, скомпилил заново и сразу все заработало...

Попробую вот как сделать: дома откомпилировать сервис, принести на работу и там запустить.. Я когда запускал свой сервис на работе из "управления компьютером" он ругался что невозможно запустить сервис, как-то так вобщем.. вот интересно, а запустит ли он тот который я дома откомпилирую? если запустит то тут на самом деле что-то с delphi, если нет то ИМХО уже винда чето.. Вобщем чуть позже отпишусь..


 
Dmitry_177   (2007-07-26 10:35) [5]

Сейчас пришел на работу, попробовал запустить сервис, который дома скомпилировал(дома он запускался) он не запускается..:(  "Управление компьютером" выдает следующую ошибку: "Не удалось запустить службу на локальный компьютер. Ошибка 1062: Служба не запущена." Виндовс на работе ставил буквально на днях, дня 3-4 назад..


 
Сергей М. ©   (2007-07-26 10:51) [6]

А где в твоем примере код регистрации сервиса ?


 
Dmitry_177   (2007-07-26 10:53) [7]

я это отдельной своей программкой делаю.. Незнаю почему, но у меня почему-то заработало..:)


 
Сергей М. ©   (2007-07-26 11:07) [8]


> я это отдельной своей программкой делаю


Это что, новая мода такая ?)


> у меня почему-то заработало.


Стук в подвале)


 
Dmitry_177   (2007-07-26 11:16) [9]


> Это что, новая мода такая ?)

При установке полной программы регистрацию будет выполнять библиотека прикрученная к инсталлятору в InnoSetup, а мне то надо же как-нибудь потестить сервис, вот я и сделал маленькую прогу для его регистрации..


> Стук в подвале)

Что это было??? =)


 
Сергей М. ©   (2007-07-26 11:19) [10]


> вот я и сделал маленькую прогу для его регистрации


И какой смысл плодить "проги" ?

Внес бы, как и положено, логику регистрации в сам исп.файл сервиса)


> Что это было?


А я знаю ?)


 
Dmitry_177   (2007-07-26 11:24) [11]


> Внес бы, как и положено, логику регистрации в сам исп.файл
> сервиса)

честно говоря даже и не подумал об этом.. а смысл? всеравно потом убирать этот код из сервиса.. а прога универсальна, для регистрации и запуска всех сервисов, только путь к нему указать надо и все =)


 
Сергей М. ©   (2007-07-26 11:29) [12]


> а смысл? всеравно потом убирать этот код из сервиса


А зачем убирать ? Пусть остается)... Баг-то в сервисе не последний, еще не раз полезешь в  его отладку)


> прога универсальна


Не выдумывай.
Такой не существует.

Только сам сервис, что необходимо указать системе в регистрационной инф-ции о себе, кроме собственно пути к его исп.файлу. Кроме пути есть еще море параметров, о которых твоя "универсальная прога" знать ничего не знает при всем желании.


 
Dmitry_177   (2007-07-26 11:43) [13]


> Только сам сервис, что необходимо указать системе в регистрационной
> инф-ции о себе, кроме собственно пути к его исп.файлу. Кроме
> пути есть еще море параметров, о которых твоя "универсальная
> прога" знать ничего не знает при всем желании.

этим ты прав.. но все же мне пока ее хватает.. но думаю попробовать вставить код регистрации сервиса в сам сервис =)



Страницы: 1 вся ветка

Текущий архив: 2008.03.23;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.019 c
2-1203397094
Ultimate
2008-02-19 07:58
2008.03.23
Компонент WebBrowser


2-1202866954
Буран
2008-02-13 04:42
2008.03.23
Как перевести на Си++ dll c TOleStream ?


2-1204095494
Chorniy
2008-02-27 09:58
2008.03.23
проблема с Thread32First, вот код... вроед все должно быть норм.


2-1203937022
Washington
2008-02-25 13:57
2008.03.23
Параметры владельца


2-1203702578
Igor23
2008-02-22 20:49
2008.03.23
Глупый вопрос...новсе же Memo