Главная страница
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.021 c
11-1189583530
robt
2007-09-12 11:52
2008.05.25
Где ошибка ?


15-1207728995
user
2008-04-09 12:16
2008.05.25
Проблема с Delphi. При запуске любого проекта дает ошибку.


2-1209713192
SergeyS
2008-05-02 11:26
2008.05.25
Помогите, пожалуйста.


15-1207672576
TIF
2008-04-08 20:36
2008.05.25
Не могу подконнектиться к Mail.ru для отправки почты...


15-1207825581
sms
2008-04-10 15:06
2008.05.25
Интернет шлюз