Главная страница
    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
15-1207475321
NailMan
2008-04-06 13:48
2008.05.25
Дело Карлсона живет! Готовим летащие табуретки...


2-1209570263
AntonUSAnoV
2008-04-30 19:44
2008.05.25
СВЯЗЫВАНИЕ ТАБЛИЦ БД В ДЕЛФИ


2-1209033156
Начинающий8
2008-04-24 14:32
2008.05.25
Удаление в QUERY


2-1209536631
Fr1K
2008-04-30 10:23
2008.05.25
Фильтр2


2-1208970958
dik
2008-04-23 21:15
2008.05.25
Редактирование рисунков кнопок





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