تحتوي هذه المقالة على معلومات حول تحرير التسجيل. قبل تحرير السجل، من المهم فهم كيفية استعادة السجل في حالة حدوث مشكلة. للحصول على معلومات حول كيفية استعادة السجل، قم بعرض موضوع التعليمات "استعادة التسجيل" في Regedit.exe أو موضوع التعليمات "استعادة مفاتيح التسجيل" في Regedt32.exe.
ظاهرة
عند استخدام ASP.NET لكتابة "مصدر حدث" جديد إلى سجل الأحداث، قد تحصل على رسالة الخطأ التالية: System.Security.SecurityException: الوصول إلى التسجيل المطلوب غير مسموح به
سبب
عملية ASP.NET قيد التشغيل هو المستخدم الافتراضي هو ASPNET (NetworkService ضمن IIS6.0)، وليس لدى هذا المستخدم إذن لإنشاء "مصدر حدث".
ملاحظة حولالحل
: (لن تقول Microsoft الكثير إذا كنت تريد تخويفك، مثل تحرير السجل سيؤدي إلى تعطل النظام). إذا كنت بحاجة إلى حل هذه المشكلة، فيجب عليك إنشاء "مصدر حدث" بواسطة مستخدم لديه حقوق المسؤول قبل تشغيل برنامج Asp.net هذا. هناك عدة طرق لإنشاء "مصادر الأحداث".
تستخدمالطريقة الأولى
الخطوات التالية لإنشاء "مصدر الحدث" ضمن "سجل التطبيق" في محرر التسجيل
1. انقر فوق "ابدأ" ثم "تشغيل".
2. أدخل "رجديت" في المربع "فتح".
3. ابحث عن المفتاح الفرعي التالي:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventlogApplication
4. انقر بزر الماوس الأيمن على "التطبيق"، ثم انقر على "جديد"، ثم انقر على "العنصر"
5. أعد تسمية هذا العنصر الجديد إلى "اختبار"
6. أغلق محرر التسجيل
يحتوي
الأسلوب الثاني
على فئة EventLogInstaller في مساحة الاسم System.Diagnostics. يقوم بإنشاء وتكوين سجلات الأحداث التي يقرأها تطبيقك ويكتبها في وقت التشغيل. من خلال الخطوات التالية يمكننا استخدام فئة EventLogInstaller لإنشاء "مصدر صناعة الحدث"
1. استخدم VB.NET أو C# لإنشاء "مكتبة فئة" تسمى EventLogSourceInstaller.
2. قم بإضافة مرجع إلى System.Configuration.Install.dll في المشروع.
3. أعد تسمية Class.VbClass.cs الذي تم إنشاؤه تلقائيًا إلى MyEventLogInstaller.vbMyEventLogInstaller.cs.
4. استبدل المحتويات الموجودة في MyEventLogInstaller.vb أو MyEventLogInstaller.cs بالكود التالي:
Visual Basic .NET Sample
ImportsSystem.Diagnostics
واردات System.Configuration.Install
يستورد System.ComponentModel
الطبقة العامة MyEventLogInstaller
يرث المثبت
خاص myEventLogInstaller كـ EventLogInstaller
Public Sub New()
قم بإنشاء مثيل لـ "EventLogInstaller".
myEventLogInstaller = حدث جديد لـ EventLogInstaller()
قم بتعيين "مصدر" سجل الأحداث..computerDownloadFilesarticle27 المراد إنشاؤه.
myEventLogInstaller.Source = "اختبار"
قم بتعيين "السجل" الذي تم إنشاء المصدر فيه.
myEventLogInstaller.Log = "التطبيق"
قم بإضافة myEventLogInstaller إلى "InstallerCollection".
Installers.Add(myEventLogInstaller)
نهاية الفرعية
نهاية الفئة
Visual C# .NET
باستخدام النظام؛
باستخدام System.Diagnostics؛
باستخدام System.ComponentModel؛
باستخدام System.Configuration.Install؛
مساحة الاسم EventLogSourceInstaller
{
[تشغيل المثبت (صحيح)]
الفئة العامة MyEventLogInstaller: Installer
{
EventLogInstaller الخاص myEventLogInstaller؛
public MyEventLogInstaller()
{
// إنشاء مثيل لـ EventLogInstaller
myEventLogInstaller = new EventLogInstaller();
// قم بتعيين مصدر سجل الأحداث..computerDownloadFilesarticle27 الذي سيتم إنشاؤه.
myEventLogInstaller.Source = "TEST";
// قم بتعيين السجل الذي تم إنشاء المصدر فيه
myEventLogInstaller.Log = "Application";
// أضف myEventLogInstaller إلى مجموعة المثبتات.
Installers.Add(myEventLogInstaller);
}
}
}
5. قم ببناء هذا المشروع واحصل على EventLogSourceInstaller.dll.
6. افتح موجه أوامر Visual Studio .NET وانتقل إلى الدليل الذي يوجد به EventLogSourceInstaller.dll.
7. قم بتشغيل هذا الأمر لإنشاء "مصدر الحدث": InstallUtil EventLogSourceInstaller.dll
معلومات أكثر تفصيلاً
نقوم بإعادة إنتاج الخطأ أعلاه وحل هذه المشكلة عن طريق إنشاء تطبيق ويب.
1. استخدم VB.Net أو C# لإنشاء تطبيق ويب Asp.net.
2. استبدال التعليمات البرمجية في WebForm1.aspx التعليمة البرمجية التالية:
Visual Basic .NET Sample
<%@ لغة الصفحة = "vb" AutoEventWireup = "صحيح" %>
<%@ استيراد مساحة الاسم = "System.Diagnostics" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<أتش تي أم أل>
< لغة البرنامج النصي = "VB" runat = "الخادم">
Sub WriteEvent_Click(Src As Object..computerDownloadFilesarticle27, e As EventArgs)
خافت كسجل أحداث جديد ("التطبيق")
"اسم مصدر الحدث."
ev.Source = "TEST"
EventLog.CreateEventSource(ev.Source..computerDownloadFilesarticle27, "Application")
حاول
ev.WriteEntry(TextBox1.Text)
قبض ب كاستثناء
Response.write ("WriteEntry " & b.message & "<br>")
إنهاء المحاولة
إيف=لا شيء
نهاية الفرعية
</نص >
<جسم>
< معرف النموذج = "Form1" runat = "الخادم">
رسالة الحدث:
<asp:textbox id = "TextBox1" runat = "الخادم" العرض = "233px" ></asp:textbox >
<asp:button id="Button1" onclick="WriteEvent_Click" runat="server" NAME="Button1" text="الكتابة إلى سجل الأحداث"></asp:button>
</النموذج>
</ الجسم>
</HTML>
نموذج Visual C# .NET
<%@ لغة الصفحة = "c#" AutoEventWireup = "صحيح" %>
<%@ استيراد مساحة الاسم = "System.Diagnostics" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<أتش تي أم أل>
< لغة البرنامج النصي = "C#" runat = "الخادم">
باطلة WriteEvent_Click(Object Src..computerDownloadFilesarticle27, EventArgs e)
{
EventLog ev = new EventLog("Application");
// اسم مصدر الحدث
ev.Source = "TEST";
EventLog.CreateEventSource(ev.Source..computerDownloadFilesarticle27, "Application")
;
{
ev.WriteEntry(TextBox1.Text);
}
الصيد (الاستثناء ب)
{
Response.Write("WriteEntry" + b.Message + "
");
}
ev = null;
}
</نص >
<جسم>
< معرف النموذج = "Form1" runat = "الخادم">
رسالة الحدث:
<asp:textbox id = "TextBox1" runat = "الخادم" العرض = "233px" ></asp:textbox >
<asp:button id="Button1" onclick="WriteEvent_Click" runat="server" NAME="Button1" text="الكتابة إلى سجل الأحداث"></asp:button>
</النموذج>
</ الجسم>
</HTML>
3. اضغط F5 لبدء هذا المشروع.
4. أدخل بعض الأحرف في TextBox وانقر فوق "كتابة في سجل الأحداث".
5. تظهر رسالة الخطأ المذكورة في قسم "الأعراض" أعلاه.
6. لحل هذه المشكلة، قم بالتعليق على السطر التالي من التعليمات البرمجية في Webform1.aspx
EventLog.CreateEventSource(ev.Source..computerDownloadFilesarticle27, "Application")
; أعد تشغيل هذا المشروع.
http://www.cnblogs.com/niit007/archive/2006/08/13/475510.html