Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.48 MB
Время: 0.019 c
15-1205853787
Андрей_К
2008-03-18 18:23
2008.05.25
Симпотичные VCL компоненты


15-1207755624
@!!ex
2008-04-09 19:40
2008.05.25
Приведение типов в FPC


15-1207730976
Виталий
2008-04-09 12:49
2008.05.25
Виртуальная машина Linux в домене


15-1207729759
pavel_guzhanov
2008-04-09 12:29
2008.05.25
Умерла Надежда Румянцева


11-1189518059
De2232345
2007-09-11 17:40
2008.05.25
Animation для kol