Текущий архив: 2008.05.25;
Скачать: CL | DM;
Вниз
Непонятное поведение в сервисе: есть обычный код - Найти похожие ветки
← →
AlexEgorov (2007-09-12 16:38) [0]
try
hDC := CreateICW(nil, PWideChar(PrinterName), nil, DM);
except
WriteErr("...");
end;
Так вот это код нормально работает с принтером Samsung ML-2010 из приложения, а из сервиса возникает исключение. Со всеми остальными принтерами работает нормально.
Есть другой код:
try
SizeDM := DocumentPropertiesW(0, hPrn, nil, nil, nil, DM_IN_BUFFER or DM_COPY);
except
WriteErr("...");
end;
Так вот при вызове этого кода из сервиса для этого принтера возникает вообще странная ситуация - до эксепшена даже не доходит, а просто сервис падает! т.е. останавливается :( из приложения всё работает отлично. Как это можно победить?
← →
Eraser © (2007-09-12 16:47) [1]
> AlexEgorov (12.09.07 16:38)
> до эксепшена даже не доходит, а просто сервис падает!
в каком именно месте?
← →
AlexEgorov (2007-09-12 16:56) [2]В сервиси в основном потоке, код работал годами, пока не попался этот принтер
← →
Сергей М. © (2007-09-12 17:06) [3]
> В сервиси в основном потоке
Каждый конкретный сервис работает в дополнительном потоке.
← →
AlexEgorov (2007-09-12 17:11) [4]Ну с терминологией ошибся - в сервисе у меня вызывается LoadServer - там запускаются потоки, вот в них и происходит работа:
procedure ServiceMain(argc: Cardinal; var argv: array of PChar); stdcall;
begin
try
hSvc := RegisterServiceCtrlHandler(ServiceName, @ServiceCtrlHandler);
if (hSvc <> 0) then
try
SetSvcStatus(SERVICE_START_PENDING, 0, 1, 10000);
LoadServer;
SetSvcStatus(SERVICE_RUNNING, 0, 0, 0);
hStopEvent := CreateEvent(nil, True, False, nil);
WaitForSingleObject(hStopEvent, INFINITE);
CloseHandle(hStopEvent);
SetSvcStatus(SERVICE_STOP_PENDING, 0, 1, 10000);
DeletePrinterThreads;
SetSvcStatus(SERVICE_STOP_PENDING, 0, 2, 10000);
FreeStorages;
finally
SetSvcStatus(SERVICE_STOPPED, 0, 0, 0);
end
else
WriteErr(70, "");
except
WriteErr(0, "ServiceMain");
end;
end;
← →
Сергей М. © (2007-09-12 17:12) [5]
> DocumentPropertiesW
> до эксепшена даже не доходит
А какой "эксепшн" ты ожидал поймать ?
← →
AlexEgorov (2007-09-12 17:14) [6]Я ничего не ожидал поймать, но после этого вызова для этого принтера сервис останавливается
← →
Сергей М. © (2007-09-12 17:15) [7]
> вызывается LoadServer - там запускаются потоки
Вот и показывай, как и что там происходит, при запуске потоков и в самих потоках ...
← →
Сергей М. © (2007-09-12 17:16) [8]
> Я ничего не ожидал поймать
А зачем тогда блок try..except ?
Страницы: 1 вся ветка
Текущий архив: 2008.05.25;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.007 c