Форум: "Система";
Текущий архив: 2002.06.24;
Скачать: [xml.tar.bz2];
ВнизСервис Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c