سؤال

ولدي التعليمات البرمجية التي يقرأ سجل الأحداث ويندوز. ويستخدم OpenEventLog، ReadEventLog ويحصل على مصدر الحدث ومعرف الحدث. بعد ذلك بالبحث عن مصدر تحت

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application

ومفتاح، يحمل DLL المناسب (ق) وفقا لما تم سرده في EventMessageFile ويستخدم أخيرا FormatMessage لدمج السلاسل الحدث مع محتوى الرسالة DLL للحصول على نص الرسالة الحدث النهائي. هذه هي الطريقة الموصى بها، وعلى الرغم من أن قليلا من الألم، يعمل كبيرة.

وحتى ... أذهب بحث المصدر وتجد أنه ليس لديها EventMessageFile، بل إدخال ProvideGuid. ويبدو أن هذا الطريق الجديدة (التي تظهر على ويندوز فيستا ويندوز 2008). Uggh - لا شيء لتمريرها إلى FormatMessage ليبحث عن نص الرسالة ودمج في سلاسل البيانات

و: (

والبحث في التسجيل للحصول على ارشد لا تؤدي إلى مراجع إلى ملفات أخرى (HTTP.SYS في حالة مصدر HTTP)، ولكن أنا لا يمكن أبدا أن تحصل على نص الرسالة كاملة. هل يجب علي استخدام تلك اجهات برمجة التطبيقات EvtOpenSession؟ أنا على أمل لا لأن لدي بالفعل EVENTLOGRECORD* من استدعاء ReadEventLog، وحقيقة أن البرنامج يحتاج إلى تشغيل ويندوز 2003 حيث لا يتم اعتماد EvtOpenSession (متوفر فقط على ويندوز فيستا ويندوز 2008). ملاحظة: بعض المصادر على ويندوز فيستا لها ProviderGUID، والبعض الآخر EventMessageFile، وبالتالي فإن الطريقة القديمة لا تزال قابلة للحياة

.

وهكذا ما أنا بعد هو وسيلة لإلقاء نظرة على ProviderGuid والحصول على DLL التي تحتاج لتمريرها إلى FormatMessage لعرض نص الرسالة سجل الأحداث كاملة.

وشكرا لأي مساهمة

هل كانت مفيدة؟

المحلول

واجهات برمجة التطبيقات التي ريتشارد روابط لوللنظام على غرار الفروسية الجديد (مقدمي قرمزي التي أطلق عليها اسم، وتسمى أحيانا المانيفستو وبناء) قدم في ويندوز فيستا 2K8 / الخادم. واحدة من القطع الأثرية من هذا النظام الجديد هو اجهات برمجة التطبيقات الجديدة لاستهلاك هذه السجلات، وآخر هو مفتاح ProviderGuid لبعض EventSources التي تنتج الأحداث باستخدام هذا الإطار الجديد.

وأعتقد أن عليك أن استخدام وظائف على ويندوز فيستا في وقت لاحق أن تستهلك هذه السجلات، وينبغي أن تعامل بهذا العمل نيابة عنك. يمكنك استخدام الأسلوب EvtFormatMessage لتنسيق السلاسل. وأعتقد أن هذه واجهات برمجة التطبيقات أيضا قراءة الأحداث التي تنتجها مقدمي "كلاسيكي".

إذا كنت تستهلك هذه الرسائل من تطبيق. NET يمكنك استخدام أنواع في مساحة الاسم System.Diagnostics.Eventing.Reader، وعرض في .NET Framework 3.5.

نصائح أخرى

وهناك واجهات برمجة التطبيقات Win32 ل القراءة / توسيع إدخالات سجل الأحداث.

وانظر MSDN: http://msdn.microsoft كوم / EN-US / مكتبة / aa385780 (VS.85) .aspx اتصال

وأي شيء آخر، وأنت من المحتمل أن تجد مشاكل مع بقع، والسماح حزم الخدمات وحدها أو الإصدارات الجديدة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top