Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2008.05.25;
Скачать: [xml.tar.bz2];

Вниз

Непонятное поведение в сервисе: есть обычный код -   Найти похожие ветки 

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2008.05.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.007 c
2-1208938072
Игорь
2008-04-23 12:07
2008.05.25
Koi в Win


2-1209833302
Res
2008-05-03 20:48
2008.05.25
Критическая секция


2-1209890039
Граф
2008-05-04 12:33
2008.05.25
Как отфильтровать по букве, если она встречается не в начале


15-1207895948
DimA
2008-04-11 10:39
2008.05.25
Проблема с кодировкой Quick Report


15-1208102997
power on
2008-04-13 20:09
2008.05.25
Кто слушает Epica и Kamelot посоветуют что-нибудь ещё?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский