Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сервис [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]

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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо