![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сервис [D6, Win2k]
BugMaker © (2002-03-27 12:33:00)Есть несколько вопросов. Как можно заставить
LogMessage("Не удается прочитать данные в реестре",1,0,1)выдавать нормальные сообщения? У меня в результате получается вот что: Не найдено описание для события с кодом ( 1 ) в источнике ( SFilExch ). Возможно, на локальном компьютере нет нужных данных в реестре или файлов DLL сообщений для отображения сообщений удаленного компьютера. В записи события содержится следующая информация: Не удается прочитать данные в реестре.Перекопал весь хелп, но ничего не нашел, где эти самые описания событий можно указать... И еще, похоже, в сервисах невозможно обрабатывать исключения... Это не есть хорошо... Есть ли еще какие- нибудь тонкости в написании сервисов?
vuk (2002-03-29 11:55:00) [1]to BugMaker:
>Осталось только узнать, что это за файл %))
А MSDN читать религия Вам не позволяет? :o)
Это не файл, а имя источника сообщений и по-умолчанию оно совпадает с именем сервиса, а вовсе не пустое.
BugMaker (2002-03-29 11:25:00) [2]Да работает это, только говорю же, он у меня напишет этот тест, но только после длительного вступления (см. выше) :-) Некрасиво так :-). В SVCMgr.Pas есть такой объект - TEventLogger. У него, разумеется, есть конструктор Create, в который можно передать строковой параметр FileName :-). Так вот если его руками не создавать, он создается автоматически, но этот самый параметр при этом остается пустым. Осталось только узнать, что это за файл %))
Shaman_Naydak (2002-03-28 19:53:00) [3]Ну ежкин кот напиши
LogMessage("ТЕСТ!") в конце концов...
BugMaker (2002-03-28 09:30:00) [4]Ууу... Я серьезно извиняюсь... Да, все верно... TRegistry.ReadString не вызывает исключения, а возвращает пустую стоку в случае, если ключа нет (RTFM?! 8-))... Меня сбило с толку то, что ReadBool, ReadFloat, ReadInteger и другие их вызывают. А что касается деления на ноль, то его попросту не происходило, поскольку компилятор, определив, что переменная нигде не используется, выкинул это из кода, то есть под отладчиком это выглядело так: он попросту перескакивал его курсором. Вот если бы в дальнейшем коде F где- то использовалась, исключение бы произошло. Всем спасибо за то, что откликнулись :-). А вот если кто подскажет, как все- таки юзать LogMessage, буду премного благодарен :-)
vuk (2002-03-27 19:33:00) [5]В Вашем первом примере никаких исключений и быть не должно. Вы с отладчиком-то ходили по данному примеру?
А во втором все нормально работает. Не знаю уж что там у Вас не то.
BugMaker (2002-03-27 16:35:00) [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 16:15:00) [7]to BugMaker:
>Очень коротко, и главное, информативно
Я Вам подсказал где искать информацию. Вы предлагаете Вам книгу подарить или всю главу (там 40 страниц на эту тему) целиком сюда вбить? :o) В принципе в MSDN тоже все это есть..
А с исключениями в сервисах все нормально. Обрабатываются без проблем.
BugMaker (2002-03-27 15:23:00) [8]Вот спасибо, vuk :-) Очень коротко, и главное, информативно :-). А если у меня такой книги нет? Да и поиски сего трактата в сети выявили следующее:
- Что цена книги около 400 рублей
- Что там все на С-ях
Ну ладно, черт бы с этим LogMessage, а с исключениями- то как?
vuk (2002-03-27 15:02:00) [9]Про то, как Windows работает с сообщениями в журнале событий и как делать dll с таблицами сообщений написано в книге Рихтера "Программирование серверных приложений для Microsoft Windows 2000"
BugMaker (2002-03-27 14:59:00) [10]Можно и нолик, но результат тот же... Или нет? Попробую еще раз :-). А исключения у меня не обрабатывались примерно в таком фрагменте кода:
Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_LOCAL_MACHINE;
try
Reg.OpenKey("Software\SomeProgram",false)
SomeString:=Reg.ReadString("SomeKey");
except
{А вот здесь никогда ничего не происходило, даже если такого ключа нет! 8-()}
end;
Reg.Free;
Все это происходило в обработчике OnExecute;
Shaman_Naydak (2002-03-27 14:37:00) [11]Зачем тебе последняя единичка в параметрах, поставь нолик.
Как это - нельзя обрабатывать исключения???
Уточни, что имел в виду