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

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

непойму в чем дело с сервисом [D7, WinXP]


Dmitry_177 ©   (2007-07-25 17:51:00) 

Создал свой сервис на 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-26 11:43:00) [1]


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

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


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


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


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


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


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

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


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


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

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


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


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


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

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


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


А я знаю ?)


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


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

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


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

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


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


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


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


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


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


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

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


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

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


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

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


Dmitry_177   (2007-07-26 09:26:00) [10]

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

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


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


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


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

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


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

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


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

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


Наверх

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