Главная страница
    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.46 MB
Время: 0.007 c
2-1209580786
Dmitry_177
2008-04-30 22:39
2008.05.25
как это работает?


2-1209015542
Foo Fighters
2008-04-24 09:39
2008.05.25
Как в искать пустые записи в ADO?


2-1209748967
NieL
2008-05-02 21:22
2008.05.25
API-функция


15-1207820014
Галинка
2008-04-10 13:33
2008.05.25
Как получить из dll параметры


15-1207771555
TIF
2008-04-10 00:05
2008.05.25
Ура! 11 000 000 статей MSDN будут переведены на русский язык...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский