Текущий архив: 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