.net 如何使用Microsoft.Diagnostics.Tracing.EventSource类记录服务发出的事件?

.net 如何使用Microsoft.Diagnostics.Tracing.EventSource类记录服务发出的事件?,.net,permissions,windows-services,etw-eventsource,.net,Permissions,Windows Services,Etw Eventsource,我们已经编写了一个类,负责记录从.NETFramework 4.6版本派生的事件。我们已经在web应用程序中成功地使用了此机制,但我们正在努力使其与作为服务运行的Windows应用程序一起工作。该服务是使用安装的。安装后,它将显示在分配给的services.msc管理单元中 要注册EventSource,我们使用带有im Manifestfilename.man参数的。打开管理单元将显示新注册的EventSource。我们正在使用这些通道记录我们的事件 但是,当我们通过在服务管理单元中发出sta

我们已经编写了一个类,负责记录从.NETFramework 4.6版本派生的事件。我们已经在web应用程序中成功地使用了此机制,但我们正在努力使其与作为服务运行的Windows应用程序一起工作。该服务是使用安装的。安装后,它将显示在分配给的services.msc管理单元中

要注册EventSource,我们使用带有
im Manifestfilename.man
参数的。打开管理单元将显示新注册的EventSource。我们正在使用这些通道记录我们的事件

但是,当我们通过在服务管理单元中发出start命令来启动应用程序时,日志机制似乎无法正常工作。应用程序不会在操作通道中生成任何条目。相反,它在调试通道中创建条目,但在调试通道中创建的条目是应该写入操作通道的条目。为调试通道指定的条目将被忽略

我们在应用程序中内置了调试模式,因此我们可以将其作为桌面应用程序运行,而无需安装服务。在这种调试模式下运行应用程序时,事件日志机制可以完美地工作


因此,我们怀疑这是一个权限问题,阻止我们的windows服务写入事件日志。不过,这似乎很奇怪,因为执行调试模式应用程序的用户没有运行该服务的本地系统帐户具有特权。我们还没有找到解决这个问题的办法。如本文所述,使用
wevtutil sl
设置权限不会产生预期的结果。

尝试使用Perfview()捕获事件。如果您的程序作为服务运行,这是否有效?若要捕获Eventsource事件,您必须在perfview中的Eventsource名称前添加*号。谢谢。使用以下参数从命令行启动perfview
perfview.exe/onlyproviders=*我们的服务提供商collect
可以正常工作。但是,我仍然不明白为什么这些信息没有写入调试事件日志。我必须为此创建EventListener吗?默认情况下,调试/分析日志处于禁用状态。确保它们已激活它们已激活。我不明白的是,如何在调试通道中记录发送给操作通道的事件&发送给调试通道的消息根本不会被记录?