![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
непойму в чем дело с сервисом [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?