gpt4 book ai didi

asp.net - 始终可供写入的事件日志源?

转载 作者:行者123 更新时间:2023-12-02 16:57:52 26 4
gpt4 key购买 nike

是否存在始终可供 ASP.NET Web 应用程序写入的事件日志源?

背景故事,以防有人有看似无关的解决方案:

我们的 ASP.NET Web 应用程序使用自己的事件日志源,但它无权创建它。因此,如果当 web 应用程序尝试写入条目时事件日志源不存在(安装说明指示管理员手动注册事件日志源,但是......),我们的 web 应用程序不会将任何内容放入出现问题时的事件日志。

我希望有另一个(与应用程序无关的)来源可以用来通知观看事件日志的人。

最佳答案

这篇知识库文章解释了这个问题 http://support.microsoft.com/kb/329291

PRB: "Requested Registry Access Is Not Allowed" Error Message When ASP.NET Application Tries to Write New EventSource in the EventLog

Symptoms

When you use ASP.NET to create a new event source in the event log, you may receive the following error message:

System.Security.SecurityException: Requested registry access is not allowed.

原因

默认情况下,ASP.NET 工作进程的用户 token 是 ASPNET(对于在 Internet 信息服务 [IIS] 6.0 上运行的应用程序,则为 NetworkService)。出现“症状”部分中的问题是因为您的帐户没有创建事件源的正确用户权限。

分辨率

第一种方法:

在注册表编辑器中的应用程序事件日志下创建事件源(在服务器上,而不是您的开发 PC 上)。为此,请按照下列步骤操作:

  1. 访问服务器的 Windows 桌面。单击“开始”,然后单击“运行”。
  2. 在“打开”文本框中,键入 regedit。
  3. 找到以下注册表子项:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application
  4. 右键单击“应用程序”子项,指向新建,然后单击
  5. 输入“TEST ”作为 key 名称。
  6. 关闭注册表编辑器。

第二种(替代)方法:

EventLogInstaller System.Diagnostics中的类(class)命名空间允许您安装和配置应用程序在运行时读取或写入的事件日志。您可以使用 EventLogInstaller 创建事件源。为此,请按照下列步骤操作:

  1. 使用 Microsoft Visual Basic .NET 或 Microsoft Visual C# .NET 创建一个名为 EventLogSourceInstaller 的新类库。默认情况下,会创建 Class1.vb 文件或 Class1.cs 文件。
  2. 在解决方案资源管理器中,右键单击 EventLogSourceInstaller ,然后单击“添加引用”。
  3. 在“添加引用”对话框中,双击 System.Configuration.Install.dll ,然后单击“确定”。
  4. 重命名 Class1.vb `Class1.cs` 到 MyEventLogInstaller.vb\MyEventLogInstaller.cs。
  5. 替换 MyEventLogInstaller.vb 中的现有代码或MyEventLogInstaller.cs使用以下示例代码:Visual Basic .NET 示例
Imports System.Diagnostics
Imports System.Configuration.Install
Imports System.ComponentModel

<RunInstaller(True)> _
Public Class MyEventLogInstaller
Inherits Installer
Private myEventLogInstaller As EventLogInstaller

Public Sub New()
' Create an instance of 'EventLogInstaller'.
myEventLogInstaller = New EventLogInstaller()
' Set the 'Source' of the event log, to be created.
myEventLogInstaller.Source = "TEST"
' Set the 'Log' that the source is created in.
myEventLogInstaller.Log = "Application"
' Add myEventLogInstaller to 'InstallerCollection'.
Installers.Add(myEventLogInstaller)
End Sub
End Class

Visual C# .NET 示例

using System;
using System.Diagnostics;
using System.ComponentModel;
using System.Configuration.Install;


namespace EventLogSourceInstaller
{
[RunInstaller(true)]
public class MyEventLogInstaller : Installer
{
private EventLogInstaller myEventLogInstaller;

public MyEventLogInstaller()
{
//Create Instance of EventLogInstaller
myEventLogInstaller = new EventLogInstaller();

// Set the Source of Event Log, to be created.
myEventLogInstaller.Source = "TEST";

// Set the Log that source is created in
myEventLogInstaller.Log = "Application";

// Add myEventLogInstaller to the Installers Collection.
Installers.Add(myEventLogInstaller);
}
}
}
  • 在“生成”菜单上,单击“生成解决方案”以创建 EventLogSourceInstaller.dll。
  • 打开 Visual Studio .NET 命令提示符。
  • 在命令提示符下,切换到 EventLogSourceInstaller.dll 所在的文件夹。
  • 运行以下命令来创建事件源:InstallUtil EventLogSourceInstaller.dll
  • 如果您使用该决议中的第二种方法,您应该可以使其发挥作用。

    如果您不想这样做或者无法让它正常工作,另一种方法是使用 web.config 中的身份标签。并冒充有权编辑注册表的用户。这只是此应用程序的安全整体,但如果您实现一些额外的安全措施,应该没问题。

    关于asp.net - 始终可供写入的事件日志源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1917549/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com