- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否存在始终可供 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 上)。为此,请按照下列步骤操作:
- 访问服务器的 Windows 桌面。单击“开始”,然后单击“运行”。
- 在“打开”文本框中,键入 regedit。
- 找到以下注册表子项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application
- 右键单击“应用程序”子项,指向新建,然后单击项。
- 输入“
TEST
”作为 key 名称。- 关闭注册表编辑器。
第二种(替代)方法:
EventLogInstaller
System.Diagnostics
中的类(class)命名空间允许您安装和配置应用程序在运行时读取或写入的事件日志。您可以使用EventLogInstaller
创建事件源。为此,请按照下列步骤操作:
- 使用 Microsoft Visual Basic .NET 或 Microsoft Visual C# .NET 创建一个名为 EventLogSourceInstaller 的新类库。默认情况下,会创建 Class1.vb 文件或 Class1.cs 文件。
- 在解决方案资源管理器中,右键单击
EventLogSourceInstaller
,然后单击“添加引用”。- 在“添加引用”对话框中,双击
System.Configuration.Install.dll
,然后单击“确定”。- 重命名
Class1.vb
`Class1.cs` 到 MyEventLogInstaller.vb\MyEventLogInstaller.cs。- 替换
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 ClassVisual 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/
Windows Phone 8 上的开发人员可以使用两个命名空间 - Microsoft.Devices.Sensors 和 Windows.Devices.Sensors。它们几乎完全相同。有人能解
如何使 NameValueCollection 可供 LINQ 查询运算符(例如 where、join、groupby)访问? 我尝试了以下方法: private NameValueCollectio
我希望能够测试哪些文本转语音可供我的 iOS 应用程序与 AVSpeechSynthesis 一起使用。生成已安装声音的列表很容易,但 Apple 将其中一些声音禁止应用程序使用,我想知道哪些声音。
我让 postgres.app 在我的 Mac 上本地运行,并希望我的本地 docker 容器能够连接到它。我该如何最好地做到这一点? 我发现这篇文章建议使用 --add-host 标志(Host p
我有一个包含多个 HTML 文件的文件夹。每个 HTML 文件都使用 AngularJS 并包含相同的声明,如下所示;
与仍然生活在 ant 构建环境世界(在 Windows 机器上)的客户合作。想要在 Java 程序中使用 google-cloud-translate 库,但如果我包含 google-cloud-tr
我是一名优秀的程序员,十分优秀!