Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.24;
Скачать: CL | DM;

Вниз

Сервис   Найти похожие ветки 

 
BugMaker ©   (2002-03-27 12:33) [0]

Есть несколько вопросов. Как можно заставить LogMessage("Не удается прочитать данные в реестре",1,0,1) выдавать нормальные сообщения? У меня в результате получается вот что: Не найдено описание для события с кодом ( 1 ) в источнике ( SFilExch ). Возможно, на локальном компьютере нет нужных данных в реестре или файлов DLL сообщений для отображения сообщений удаленного компьютера. В записи события содержится следующая информация: Не удается прочитать данные в реестре. Перекопал весь хелп, но ничего не нашел, где эти самые описания событий можно указать... И еще, похоже, в сервисах невозможно обрабатывать исключения... Это не есть хорошо... Есть ли еще какие- нибудь тонкости в написании сервисов?


 
Shaman_Naydak ©   (2002-03-27 14:37) [1]

Зачем тебе последняя единичка в параметрах, поставь нолик.

Как это - нельзя обрабатывать исключения???
Уточни, что имел в виду


 
BugMaker ©   (2002-03-27 14:59) [2]

Можно и нолик, но результат тот же... Или нет? Попробую еще раз :-). А исключения у меня не обрабатывались примерно в таком фрагменте кода:

Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_LOCAL_MACHINE;
try
Reg.OpenKey("Software\SomeProgram",false)
SomeString:=Reg.ReadString("SomeKey");
except
{А вот здесь никогда ничего не происходило, даже если такого ключа нет! 8-()}
end;
Reg.Free;


Все это происходило в обработчике OnExecute;


 
vuk ©   (2002-03-27 15:02) [3]

Про то, как Windows работает с сообщениями в журнале событий и как делать dll с таблицами сообщений написано в книге Рихтера "Программирование серверных приложений для Microsoft Windows 2000"


 
BugMaker ©   (2002-03-27 15:23) [4]

Вот спасибо, vuk :-) Очень коротко, и главное, информативно :-). А если у меня такой книги нет? Да и поиски сего трактата в сети выявили следующее:
- Что цена книги около 400 рублей
- Что там все на С-ях
Ну ладно, черт бы с этим LogMessage, а с исключениями- то как?


 
vuk ©   (2002-03-27 16:15) [5]

to BugMaker:
>Очень коротко, и главное, информативно
Я Вам подсказал где искать информацию. Вы предлагаете Вам книгу подарить или всю главу (там 40 страниц на эту тему) целиком сюда вбить? :o) В принципе в MSDN тоже все это есть..

А с исключениями в сервисах все нормально. Обрабатываются без проблем.


 
BugMaker ©   (2002-03-27 16:35) [6]

Тогда почему чтение из реестра его не вызывает? Или это частный случай? А как нассчет деления на ноль? А оно, кстати, тоже никаких ошибок и исключений не вызывает...

procedure TService1.Timer1Timer(Sender: TObject);
begin
Beep;
end;

procedure TService1.ServiceExecute(Sender: TService);
var
f,f1,f2:Real;
begin
try
f1:=5;
f2:=0;
f:=f1/f2;
except
ErrCode:=2;
Service1.DoStop;
end;
Timer1.Enabled:=True;
while not Terminated do begin
ServiceThread.ProcessRequests(True);
end;
Timer1.Enabled:=False;
end;


То есть делит, и программа продолжает себе пикать дальше... Если совсем убрать обработчик Try...Except, то ситуация не меняется. Мне тоже кажется, что исключения должны работать, но не работают...


 
vuk ©   (2002-03-27 19:33) [7]

В Вашем первом примере никаких исключений и быть не должно. Вы с отладчиком-то ходили по данному примеру?
А во втором все нормально работает. Не знаю уж что там у Вас не то.


 
BugMaker ©   (2002-03-28 09:30) [8]

Ууу... Я серьезно извиняюсь... Да, все верно... TRegistry.ReadString не вызывает исключения, а возвращает пустую стоку в случае, если ключа нет (RTFM?! 8-))... Меня сбило с толку то, что ReadBool, ReadFloat, ReadInteger и другие их вызывают. А что касается деления на ноль, то его попросту не происходило, поскольку компилятор, определив, что переменная нигде не используется, выкинул это из кода, то есть под отладчиком это выглядело так: он попросту перескакивал его курсором. Вот если бы в дальнейшем коде F где- то использовалась, исключение бы произошло. Всем спасибо за то, что откликнулись :-). А вот если кто подскажет, как все- таки юзать LogMessage, буду премного благодарен :-)


 
Shaman_Naydak ©   (2002-03-28 19:53) [9]

Ну ежкин кот напиши
LogMessage("ТЕСТ!") в конце концов...


 
BugMaker ©   (2002-03-29 11:25) [10]

Да работает это, только говорю же, он у меня напишет этот тест, но только после длительного вступления (см. выше) :-) Некрасиво так :-). В SVCMgr.Pas есть такой объект - TEventLogger. У него, разумеется, есть конструктор Create, в который можно передать строковой параметр FileName :-). Так вот если его руками не создавать, он создается автоматически, но этот самый параметр при этом остается пустым. Осталось только узнать, что это за файл %))


 
vuk ©   (2002-03-29 11:55) [11]

to BugMaker:
>Осталось только узнать, что это за файл %))
А MSDN читать религия Вам не позволяет? :o)
Это не файл, а имя источника сообщений и по-умолчанию оно совпадает с именем сервиса, а вовсе не пустое.



Страницы: 1 вся ветка

Текущий архив: 2002.06.24;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.019 c
3-77280
PSA
2002-05-30 14:19
2002.06.24
Проблема редактирования записей при подключении базы через ADO .


4-77660
Leo_
2002-04-24 03:28
2002.06.24
можно убрать программу в TRAY?


14-77588
savva
2002-05-22 10:48
2002.06.24
П Р И З Ы В !!! Модераторам и Мастерам !!!


1-77414
Гаргоша
2002-06-11 01:51
2002.06.24
Объединение ячеек таблицы в WORD


7-77635
Vitaly
2002-03-28 16:15
2002.06.24
Не получается переписать Audio-CD на болванку.