2009-08-19 18 views
5

मैं डेल्फी 5 एप्लिकेशन से विंडोज लॉग में ईवेंट लॉगिंग करने और here पर किसी अन्य पोस्ट से लॉग इन करने के बारे में देखना चाहता हूं, मुझे लगता है कि मैं ऐसा करने के लिए TEventLogger कक्षा का उपयोग कर सकता हूं।TEventLogger के लिए कोई प्रकाश?

हालांकि, मुझे TEventLogger.LogMessage प्रक्रिया के सिंटैक्स पर कोई दस्तावेज नहीं मिल रहा है, इसलिए मुझे नहीं पता कि सभी पैरामीटर का मतलब क्या है, उनका उपयोग कैसे करें, या यहां तक ​​कि संभावित मूल्य भी उपलब्ध हैं।

मैंने चारों ओर देखने की कोशिश की है, और मुझे लगता है कि एम्बरकाडेरो का एक पृष्ठ यह बताता है कि समारोह मौजूद है, लेकिन इसके वाक्यविन्यास पर कुछ भी नहीं है, और एमएसडीएन कोई मदद नहीं है क्योंकि मुझे केवल बिज़टॉक संस्करण मिल सकता है जो मुझे अच्छा नहीं करता ।

क्या किसी के पास इस पर एक सहायता पृष्ठ या जानकारी है जो इस पर कुछ प्रकाश डाल सकती है कि मैं इसके साथ क्या कर सकता हूं?

उत्तर

8

TEventLoggerTService के लिए एक आंतरिक सहायक वर्ग है।

आप TService.LogMessage() फ़ंक्शन का उपयोग करके संदेश लॉग इन करें, न कि TEventLogger पर सीधे कॉल करके। LogMessage() के पैरामीटर सीधे Win32 API ReportEvent() फ़ंक्शन के मानकों के साथ मेल खाते हैं।

विवरण के लिए Win32 API दस्तावेज़ देखें।

यदि आप एक सेवा अनुप्रयोग नहीं लिख रहे हैं, तो आपको इसके बजाय Win32 API RegisterEventSource() और ReportEvent() फ़ंक्शंस को कॉल करने की आवश्यकता है।

+0

यह एक मजेदार होगा। मुझे अंततः दोनों विधियों की आवश्यकता होगी क्योंकि एप्लिकेशन एक सेवा के रूप में चलाया जा सकता है (जिसे हम इसे बनाना चाहते हैं) या एक स्टैंडअलोन निष्पादन योग्य (जो वर्तमान में है)। कम से कम मुझे पता है कि यह पता लगाने के लिए कि यह किस मोड में चल रहा है और उचित रूप से स्विच कर सकता है। सहायता के लिए हर किसी को धन्यवाद। –

7

ईवेंट लॉग करने के लिए एक आवेदन पत्र लिखने के एक साधारण उदाहरण:

procedure WriteToLog(Msg:string; EventId: Word = 0); 
var 
    h: THandle; 
begin 
    h := RegisterEventSource(nil, PChar(Application.ExeName)); 
    if h > 0 then 
    try 
    ReportEvent(h, 0, 0, EventId, nil, 1, 0, @Msg, nil); 
    finally 
    DeregisterEventSource(h); 
    end; 
end; 

procedure TForm7.Button1Click(Sender: TObject); 
begin 
    WriteToLog('* Blah Blah Blah *'); 
end; 

लेकिन सावधान रहना है कि उलझन में विवरण इस तरह नहीं registering the EventID with the system दे देंगे:

ईवेंट ID के लिए विवरण (0) स्रोत में (सी: \ दस्तावेज़ और सेटिंग्स \ fgaillard \ मेरे दस्तावेज़ \ RAD स्टूडियो \ प्रोजेक्ट \ Project1.exe) नहीं मिल सका। स्थानीय कंप्यूटर में रजिस्ट्री जानकारी या दूरस्थ कंप्यूटर से संदेश प्रदर्शित करने के लिए आवश्यक DLL फ़ाइलों को संदेश नहीं हो सकता है। आप/AUXSOURCE = ध्वज का उपयोग को इस विवरण को पुनर्प्राप्त करने में सक्षम हो सकते हैं; विवरण के लिए सहायता और सहायता देखें। निम्नलिखित जानकारी घटना का हिस्सा है: * ब्ला ब्ला ब्ला *।