Discussion:
Dziennik systemu Windows
(Wiadomość utworzona zbyt dawno temu. Odpowiedź niemożliwa.)
Sebcio
2008-01-18 14:51:48 UTC
Permalink
Witam !

Piszę aplikację usługi i napotkałem na pewien problem dotyczący
logowania pracy usługi, przy użyciu LogMessage(). Otóż wszystko działa
pięknie, tyle że rejestrowanie w dzienniku zdarzenia zawierają na
początku następujący tekst:

"Nie można odnaleźć opisu dla identyfikatora zdarzenia 0 ze źródła
MyService. Albo składnik wywołujący to zdarzenie nie jest zainstalowany
na komputerze lokalnym, albo instalacja jest uszkodzona. Możesz
zainstalować lub naprawić składnik na komputerze."

Co zrobić aby powyższa informacja nie była wyświetlana w podglądzie
zdarzeń ?
--
Pozdrawiam,
Sebcio
abc
2008-01-18 14:57:45 UTC
Permalink
Piszę aplikację usługi i napotkałem na pewien problem dotyczący logowania
pracy usługi, przy użyciu LogMessage().
Niech Twoja aplikacja tworzy własny swój log do pliku tekstowego - łatwiej
trochę się potem to analizuje.
Sebcio
2008-01-18 15:10:01 UTC
Permalink
Post by abc
Niech Twoja aplikacja tworzy własny swój log do pliku tekstowego -
łatwiej trochę się potem to analizuje.
Jest to usługa systemowa, wolę by korzystała z dziennika systemu Windows.
--
Pozdrawiam,
Sebcio
Piotr Rezmer
2008-01-18 20:56:37 UTC
Permalink
Post by Sebcio
Post by abc
Niech Twoja aplikacja tworzy własny swój log do pliku tekstowego -
łatwiej trochę się potem to analizuje.
Jest to usługa systemowa, wolę by korzystała z dziennika systemu Windows.
Do event loga warto zrzucać błędy, wtedy jeśli masz jakiegoś forwardera,
może zostać wysłany trap SNMP lub mail. Jeśli chcesz logować zachowanie
usługi, to mimo wszystko lepszy jest normalny log w pliku tekstowym.
Zalety:
-możliwość zwiększenia pojemności (możesz mieć wiele plików w rotacji)
-możliwość wyszukiwania tekstu np. za pomocą notatnika
--
pozdrawiam
Piotr
XLR250&bmw_f650_dakar
Sebcio
2008-01-21 10:21:56 UTC
Permalink
Post by Piotr Rezmer
Do event loga warto zrzucać błędy, wtedy jeśli masz jakiegoś forwardera,
może zostać wysłany trap SNMP lub mail. Jeśli chcesz logować zachowanie
usługi, to mimo wszystko lepszy jest normalny log w pliku tekstowym.
No właśnie błędy chcę zwalać do event loga, chodzi o ukłon w stronę
administratora maszyny. Bardziej szczegółowe dane dotyczące pracy usługi
gromadzone są we własnym logu, odczytywalnym tylko przeze mnie.
--
Pozdrawiam,
Sebcio
Tom
2008-01-18 22:21:07 UTC
Permalink
Post by Sebcio
Witam !
Piszę aplikację usługi i napotkałem na pewien problem dotyczący
logowania pracy usługi, przy użyciu LogMessage(). Otóż wszystko działa
pięknie, tyle że rejestrowanie w dzienniku zdarzenia zawierają na
"Nie można odnaleźć opisu dla identyfikatora zdarzenia 0 ze źródła
MyService. Albo składnik wywołujący to zdarzenie nie jest zainstalowany
na komputerze lokalnym, albo instalacja jest uszkodzona. Możesz
zainstalować lub naprawić składnik na komputerze."
Co zrobić aby powyższa informacja nie była wyświetlana w podglądzie
zdarzeń ?
Robilem cos takiego bardzo dawno i nie za bardzo pamietam... Musisz napisac dll ktory nic nie robi, np.

library EventResDll;
{$R EventResDll.res}
begin
end.

W pliku EventResDll.res masz tabele wiadomosci ktore chcesz wyswietlac (ja uzywam XN Resource Editor do tego - http://www.wilsonc.demon.co.uk/d10resourceeditor.htm). O ile dobrze pamietam to dll dajesz do Windows\System32 i musisz tez gdzies dopisac go do rejestru. Nie pamietam szczegolow ale powinienem wygrzebac ten kod, jak znajde to moge podeslac.

Tomek
Grzegorz Skoczylas
2008-01-19 13:57:13 UTC
Permalink
Post by Sebcio
Witam !
Piszę aplikację usługi i napotkałem na pewien problem dotyczący
logowania pracy usługi, przy użyciu LogMessage(). Otóż wszystko działa
pięknie, tyle że rejestrowanie w dzienniku zdarzenia zawierają na
"Nie można odnaleźć opisu dla identyfikatora zdarzenia 0 ze źródła
MyService. Albo składnik wywołujący to zdarzenie nie jest zainstalowany
na komputerze lokalnym, albo instalacja jest uszkodzona. Możesz
zainstalować lub naprawić składnik na komputerze."
Co zrobić aby powyższa informacja nie była wyświetlana w podglądzie
zdarzeń ?
Najpierw musisz przygotować specjalny plik zasobów zawierający
informacje o rodzajach monitorowanych komunikatów. W tym celu
przygotowujesz prosty plik tekstowy i kompilujesz go specjalnym
kompilatorem (można go pobrać za darmo z Microsoft). Dokładniejszy opis
masz na stronie http://tiny.pl/p6dt (Message Compiler) oraz na stronie
http://tiny.pl/p6d7 (MESSAGETABLE Resource).

Krok po kroku:
~~~~~~~~~~~~~~
Jeżeli plik źródłowy dla tego kompilatora jest w pliku Komunikaty.mc to
najpierw kompilujesz go tym kompilatorem pobranym z powyższych stron:
mc -U Komunikaty.mc
W wyniku kompilacji powstaną pliki z rozszerzeniami .bin, .h oraz .rc.

Następie kompilujesz te pliki do pliku z rozszerzeniem .res przy
poleceniem:
brcc32 -fo Komunikaty.res -m Komunikaty.rc

Program "brcc32" jest w Delphi w folderze "Bin" (w Delphi7; w innych
chyba tak samo).

Wygenerowany plik .res dołączasz do kodu swojej usługi dopisując w pliku
.dpr następujący tekst:
{$R Komunikaty.res }

Na koniec definiujesz w kodzie usługi odpowiednie stałe. W tym celu
otwierasz plik .h (wygenerowany przez kompilator MC). Są tam instrukcje
#define. Identyczne stałe musisz zdefiniować w swoim kodzie. Stałych
tych używasz jako ostatni parametr metody "LogMessage".

Przykład:
~~~~~~~~~
Plik Komunikaty.mc
------------------

LanguageNames = (Polish = 0x415:MSG00415)


;// Informacja
MessageId = 1
SymbolicName = MSG_INFORMATION
Severity = Informational
Facility = Application
Language = Polish
%1
.

;// Ostrzeżenie
MessageId = 2
SymbolicName = MSG_WARNING
Severity = Warning
Facility = Application
Language = Polish
Uwaga! %1
.

;// Błąd
MessageId = 3
SymbolicName = MSG_ERROR
Severity = Error
Facility = Application
Language = Polish
Post by Sebcio
BŁĄD: %1
.

Uwaga! Te kropki na końcu każdej definicji są częścią tych definicji.

Kompilator MC utworzy pliki MSG00415.bin, Komunikaty.rc oraz
Komunikaty.h. Plik Komunikaty.h będzie zawierać między innymi
następujące definicje:

// MessageId: MSG_INFORMATION
//
// MessageText:
//
// %1
//
#define MSG_INFORMATION 0x40000001L

// Ostrzeżenie
//
// MessageId: MSG_WARNING
//
// MessageText:
//
// Uwaga! %1
//
#define MSG_WARNING 0x80000002L

// Błąd
//
// MessageId: MSG_ERROR
//
// MessageText:
//
// >>> BŁĄD: %1
//
#define MSG_ERROR 0xC0000003L

Można te definicje w kodzie swojej usługi zapisać na przykład tak:

const
MSG_INFORMATION = Integer($40000001);
MSG_WARNING = Integer($80000002);
MSG_ERROR = Integer($C0000003);

Następnie rejestrujemy swoje zdarzenia w systemowym dzienniku zdarzeń:

// Błąd:
LogMessage(sError, EVENTLOG_ERROR_TYPE, 0, MSG_ERROR);

// Infomacja:
LogMessage(sInfo, EVENTLOG_INFORMATION_TYPE, 0, MSG_INFORMATION);

// Ostrzeżenie:
LogMessage(sWarn, EVENTLOG_WARNING_TYPE, 0, MSG_WARNING);


Wszystko co opisałem wyżej jest wynikiem szukania w Internecie.
Zastosowałem to w jeden swojej usłudze. Zadziałało.
--
Pozdrawiam,

Grzegorz Skoczylas
http://gskoczylas.rekord.pl
----------------------------------------------
Piotr Hosowicz
2008-01-19 14:25:59 UTC
Permalink
Grzegorz Skoczylas pisze:

[ciach]
Post by Grzegorz Skoczylas
Wszystko co opisałem wyżej jest wynikiem szukania w Internecie.
Zastosowałem to w jeden swojej usłudze. Zadziałało.
Troche OT: szacuneczek. Oby więcej takich postingów na grupie.

Na marginesie: wygląda to na typowy windowsowy chiński tanies z
szablami, przynajmniej jak się to porówna z Linuxowymi API do sysloga.
Oczywiście Linuxowy syslog ma swoje za uszami, ale to inna kwestia.

Pozdrawiam,

Piotr Hosowicz
Sebcio
2008-01-21 10:33:46 UTC
Permalink
Post by Piotr Hosowicz
Troche OT: szacuneczek. Oby więcej takich postingów na grupie.
Przyłączam się do szacuneczku i dziękuję koledze Grzegorzowi za
dokładny opis.
Post by Piotr Hosowicz
Na marginesie: wygląda to na typowy windowsowy chiński tanies z
szablami, przynajmniej jak się to porówna z Linuxowymi API do sysloga.
Oczywiście Linuxowy syslog ma swoje za uszami, ale to inna kwestia.
Zgadza się, jak pisałem demona pod Linucha, obsługa sysloga była
łatwiejsza. Teoretycznie tutaj też nie powinno być problemu, bo do
windowsowego loga przekazuję opis zdarzenia i jego charakter... a jednak
proste rzeczy ktoś musiał skomplikować. Czy nie można było napisać "Nie
ma więcej informacji" ? :)
--
Pozdrawiam,
Sebcio
Adam Siwoń
2008-01-22 21:14:25 UTC
Permalink
Post by Grzegorz Skoczylas
Post by Sebcio
Witam !
Piszę aplikację usługi i napotkałem na pewien problem dotyczący
logowania pracy usługi, przy użyciu LogMessage(). Otóż wszystko działa
pięknie, tyle że rejestrowanie w dzienniku zdarzenia zawierają na
[...]
Najpierw musisz przygotować specjalny plik zasobów zawierający
informacje o rodzajach monitorowanych komunikatów. W tym celu
przygotowujesz prosty plik tekstowy i kompilujesz go specjalnym
kompilatorem (można go pobrać za darmo z Microsoft). Dokładniejszy opis
masz na stronie http://tiny.pl/p6dt (Message Compiler) oraz na stronie
http://tiny.pl/p6d7 (MESSAGETABLE Resource).
Wielkie dzięki. Za kilka dni bardzo mi się przyda ten opis.
--
z pozdrowieniami
Adam Siwoń
Loading...