C#事件在同一时间被忽略
我目前正在遇到我不久前创建的EventLog监视器的问题. 我的应用程序订阅了EventLog的输入撰写事件. 我注意到,如果多个事件同时发生(在同一秒之内),则只有一个事件引发了触发我的EventHandler的事件. _eventLog = new System.Diagnostics.EventLog(_logName); _eventLog.EntryWritten += new EntryWrittenEventHandler(eventlog_EntryWritten); _eventLog.EnableRaisingEvents = true; 是否有可能避免这种行为,因此我的EventLog_entryWritten方法将用于所有记录到EventLog的事件? 解决方案 事件通常不会以异步模式运行,因此,如果EventLog_entryWritten在另一个事件之前未完成,则可能会错过这些事件.在火中提出自己的异步活动,忘记方法.我不确定,但这可能
10 2024-04-26
编程技术问答社区
如何使用System.Diagnostics.EventLog从一个任意的evxt文件中读取?
我如何使用 EventLogQuery 能够打开evtx文件,但在.NET 2.0中不可用. 解决方案 让我们假设日志文件为LogA.evtx. 复制LogA.evtx to C:\Windows\System32\winevt\Logs. 添加一个新的注册表密钥: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog 称为LogA.例如.在PowerShell中: Set-Location HKLM: New-Item .\SYSTEM\CurrentControlSet\services\eventlog -Name LogA 打开事件查看器以验证 loga 显示在应用程序和服务logs logs . 下 您现在可以使用EventLog打开LogA: using System; using System.Diagnostics; namespace EventL
22 2024-04-26
编程技术问答社区
我如何在Windows Server 2016上用本地账户获得对安全事件日志的完全读取权限
我有一个应用程序,该应用程序在2016 Windows Server V1607上的事件日志中创建新事件源.尚不清楚来源将拥有哪些名称.为了归档此帐户需要读取对所有事件源的访问以确保源名称尚不存在(为什么不允许不同日志中的双源名称是另一个有趣的问题).默认情况下,本地帐户被阻止阅读安全事件日志,因此创建新来源的最终错误是没有读取对安全日志的读取访问. 最有前途的方法似乎是这个问题的答案:/a> 我遵循步骤1-5更改hkey_local_machine \ system \ currentControlset \ services \ eventlog \ security的注册表权限,通过为本地帐户添加读取权限.我检查了安全文件夹中的所有子键,它们都显示了该帐户的正确读取访问.尽管如此,当使用简单的C#程序添加带有新来源的事件时,我现在会遇到另一个错误: using System; using System.Diagnostics; namespace Eventlo
16 2024-04-26
编程技术问答社区
从Windows审计日志中提取任何机器的具体信息?
这是这个问题. 我遵循公认的答案,以为我对结果感到满意,但遇到了障碍. 设置 我正在监视目录的服务器中运行我的C#程序.每当修改文件时,FileSystemWatcher都会触发一个事件,该事件会导致程序检查安全审核日志(已打开的安全审核日志,请参阅上一个问题的解决方案). 问题 我的问题是,当远程用户修改文件后检查安全日志时,它们会记录为匿名用户.特别是" NT Authority \ System".有什么方法可以从这些安全日志中获取独特的信息,以帮助我区分用户修改文件? Deets 我正在使用EventLog读取这样的安全日志: EventLog log = new EventLog("security"); EventLogEntryCollection col = log.Entries; //... string username = entry.UserName; 解决方案 这可能会有所帮助 字符串用户名= system
20 2024-04-26
编程技术问答社区
使用.net检查事件日志中是否有事件被记录的最简单方法是什么?
在一段时间内,检查事件是否已在EventLog中记录的最简单方法是什么? 我想执行一系列自动测试步骤,然后检查是否登录任何错误,忽略了一些我不感兴趣的消息来源.我可以使用system.diarostics.diarostics.eventlog,然后查看在条目集合中,但对于这种情况似乎并不可用.例如,如果事件日志要删除旧条目,则计算随着时间的推移会变得越来越小.我更喜欢在一段时间内查询日志或对其进行监视以进行更改的某种方法.例如 DateTime start = DateTime.Now; // do some stuff... foreach(EventLogEntry entry in CleverSolution.EventLogEntriesSince(start, "Application")) { // Now I can do stuff with entry, or ignore if its Source is one // that I don'
20 2024-04-26
编程技术问答社区
如何在C#中向SECURITY事件日志写日志?
我想在安全事件日志中写下这些值: Console.WriteLine("Level: {0}", eventInstance.LevelDisplayName); Console.WriteLine("Date: {0}", eventInstance.TimeCreated); Console.WriteLine("Forrás: {0}", eventInstance.ProviderName); Console.WriteLine("Event id: {0}", eventInstance.Id); Console.WriteLine("Task: {0}", eventInstance.TaskDisplayName); string sSource; string sLog; string sEvent; sSource = eventInstance.ProviderName; sLog = "Security"; sEvent = eventInstance.F
30 2024-04-25
编程技术问答社区
检查事件日志写入权限而不写入条目
我需要检查用户是否具有事件日志的写入权限.我现在的解决方案是在日志中写下测试消息并之后将其删除(以免日志混乱,因为某些" HealthCheck'--服务: const string log = "MyApplicationLog"; const string source = "PermissionCheck"; EventLog evLog; try { if (!EventLog.SourceExists(source)) { EventLog.CreateEventSource(source, log); } evLog = new EventLog(); evLog.Source = source; evLog.WriteEntry("PermissionCheck Test Message"); return true; } finally { //remove the check mes
28 2024-04-25
编程技术问答社区
我怎样才能用C#写到windows事件日志(我得到了某种错误)?
我已经写了: . . . //Log exception to the event log if (!EventLog.SourceExists("PodaHIS")) { EventLog.CreateEventSource("PodaHIS", "Application"); } EventLog eventLog = new EventLog(); eventLog.Log = "Application"; eventLog.Source = "PodaHIS"; eventLog.WriteEntry(error.ToString(), EventLogEntryType.Error); 我还启用了对localmachine \ aspnet的读取权限. 作为回报,我得到了: The source was not found, but some or all event logs could not be searched. Inaccesi
16 2024-04-24
编程技术问答社区
在查询事件日志时,如何创建一个EventBookmark
我有一个EventLogreader对象,并且在事件日志中的查询是这样: string query = "*[System[(Level=2) and TimeCreated[@SystemTime>='%LastRun%']]]") 该代码基本上使用读者查询与搜索查询匹配的所有事件,因为读者上次运行. 我宁愿将EventBook标记用于此目的.毕竟就是这样!但是我很难找到任何工作代码. 我现有的代码运行,部分是这样: // This line replaces the %LastRun% code with the date var myQuery = myEventLogQuery.Query.Replace("%LastRun%", myEventLogQuery.LastRun.ToString("o")); var query = new EventLogQuery(myEventLogQuery.Log, myEventLogQuery.PathT
14 2024-04-23
编程技术问答社区
事件查看器 - 记录到子文件夹?
我已经搜索和搜索了,找不到答案.我们有一个自定义服务,可以运行并登录活动查看器.在Windows 7中,有一个名为"应用程序和服务日志"的文件夹.如何在那里记录事件?甚至可能吗? 解决方案 使用以下内容创建新事件日志时,它将自动发生. EventLog.CreateEventSource("Our Source", "Our Log"); 和呼叫需要提高特权,但只需要完成一次即可.之后,您可以使用普通特权使用. EventLog _eventLog = new EventLog("Our Log"); // Writes to OUR event log--NOT the system created "Application" 注意:如果您将源从Application移至自定义日志,则可能需要进行一些调整和/或重新启动,因为将源从一个日志移动到另一个日志不是正常的. 如果您使用的是istalutil,也可以使用System.Diagnostics.Ev
14 2024-04-22
编程技术问答社区
我如何在 "应用程序和服务日志 "的深处指定事件?
记录事件时,以下代码片段发射事件.示例代码工作正常,但我要监视的日志实际上是"应用程序和服务日志> Microsoft> Windows> Windows>"任务调度程序">"操作". 我在代码样本中插入什么? ... EventLog myNewLog = new EventLog("Application", ".", "testEventLogEvent"); myNewLog.EntryWritten += new EntryWrittenEventHandler(MyOnEntryWritten); myNewLog.EnableRaisingEvents = true; ... 解决方案 日志名称为Microsoft-Windows-TaskScheduler/Operational,但我认为您无法使用EventLog类访问它.我认为该日志基于Windows的事件跟踪,因此您需要使用 system.diagnostics.
18 2024-04-22
编程技术问答社区
通过特定的源读取windows事件日志
如何通过特定来源,日期时间和类别读取Windows事件日志? 解决方案 考虑使用 EventLog 让您访问或自定义 Windows事件日志,哪些记录 有关重要软件的信息 或硬件事件.使用EventLog, 您可以从现有日志中阅读,写 日志的条目,创建或删除 事件源,删除日志和 响应日志条目.你也可以 创建事件时创建新日志 来源. 其他解决方案 You could use additional software called " log parser " 附带您可以使用的API,安装后检查帮助文件:) 其他解决方案 我知道这个问题很旧,但是我今天花了很多时间来建立解决方案,所以我想我会分享: Dim myEventLogEntryCollection As EventLogEntryCollection = New EventLog("Application", System.Environment.MachineName).Entr
16 2024-04-22
编程技术问答社区
访问/写入事件记录的问题
我正在使用一些旧代码(坦率地说,我不知道它的作用一半)试图将其移至IIS7. 我看到的问题之一是我遇到了这个错误: [SecurityException:找不到源,但是无法搜索某些或所有事件日志.无法访问的日志:安全.] 如果我手动转到hkey_local_machine \ system \ currentControlset \ services \ eventlog \ security,并设置该键的(安全)权限,以使"每个人"拥有完整访问权限,这没问题.但是显然这不是最佳解决方案. 有人知道一种更好的方法来删除此例外吗? 解决方案 解决此操作的一种方法是在完全信任下运行一个简单的控制台应用程序,该应用程序在有问题的源名称下写下单个EventLog条目.对于每个服务器,您必须执行此操作. 从那时起,您应该能够在该源名称下登录. (至少这是我的观察.)这只是创建一个未知来源,您无法从ASP.NET下进行,登录到现有源应该不是问题. 问题是:
26 2024-04-21
编程技术问答社区
以编程方式创建一个自定义的事件日志视图
我想在C#应用程序中以编程方式创建自定义EventLog视图. 这是如何在Microsoft Windows的EventLog应用程序的帮助下创建自定义EventLog视图的方法: 我搜索了类System.Diagnostics.EventLog的方法,该方法与Microsoft的EventLog应用程序中的按钮相同.可悲的是,我找不到任何涵盖我需求的功能. 是否有人在编程中创建了C#的自定义EventLog视图或知道有效的方式? 解决方案 如果刚刚测试了找到的方法try { XmlTextWriter view = new XmlTextWriter("C:\\ProgramData\\Microsoft\\Event Viewer\\Views\\View_1.xml", Encoding.Unicode); // Root. view.WriteStartDocument(); view.WriteStartElement("ViewerConfig");
30 2024-04-20
编程技术问答社区
如何让EventLog将用户名记录到Window Event Log中?
我正在写信给客户端应用程序是ASP.NET并使用表单身份验证. public static void WriteOnce() { EventLog log = new EventLog("MyApp"); if (!EventLog.SourceExists("MySource")) { EventSourceCreationData data = new EventSourceCreationData("MySource", "MyApp"); EventLog.CreateEventSource(data); } log.Source = "MySource"; log.WriteEntry("Hello World", EventLogEntryType.Information,123,456,new byte[]{1,2,3}); } 更新:我在ASP.NET中检查了一下,即使设置Inden
10 2024-04-20
编程技术问答社区
在C#中查询事件日志的消息内容的最简单方法是什么?
我有兴趣编写一些代码以查询Windows事件日志中的特定错误消息内容,如 解决方案 您可以在事件查看器中创建自定义视图,并复制生成的XML.模式完全相同. 另一个选项是一次读取事件,并使用字符串搜索,XPATH或LINQ检查其内容.显然,不是最可扩展的解决方案,尤其是在查询远程服务器时. 谷歌搜索可能会出现一些似乎正在使用LINQ查询事件日志的样本,但实际上它们只是在所有条目上枚举.似乎没有任何提供商可以真正将LINQ查询转换为适当的XML并返回结果 其他解决方案 也许有人会发现这有用... 我正在使用 linqpad 在远程计算机上查询安全事件登录.它的工作缓慢,但产生我需要的结果.查询我正在使用: EventLog elog = new EventLog(); elog.MachineName = "REMOTE MACHINE NAME"; elog.Log = "Security"; var query = from EventLogE
16 2024-04-20
编程技术问答社区
事件日志IPAddress不一定能解决
我正在使用System.diagnostics.eventing.erder.eventlogwatcher类将安全事件日志连接起来,并且我在2008服务器框上观看事件ID 4625,用于输入失败的登录(RDP,特别是). > > 日志捕获工作正常,我将结果倾倒到相关的,以后的处理中的队列中.但是,有时捕获的日志会填充iPaddress数据字段(已解决),有时它们没有. 我在观看服务器时运行了Windump,尝试从不同的服务器和操作系统口味尝试我通常的RDP登录,而我能得出的唯一结论是版本差异问题,而不是糟糕的编码.虽然我可能错了,大声笑. 问题是在这些连接方面登录自己.所有失败的RDP登录都已记录,并且可以正确处理,但是某些日志根本不记录失败连接的源IP地址. MSTSC的一些新风味是否会导致远程事件日志未记录源IP地址?对于我在此挂钩服务器上运行的任何其他2008服务器似乎都是如此.到目前为止,我尝试过的任何2003或XP机器都可以正确记录. 如果您
30 2024-04-20
编程技术问答社区
在事件查看器的 "应用程序和服务日志 "部分创建一个应用程序和事件日志
我有一个.NET应用程序,我想在其中写入未经处理的事件给活动查看器.我注意到有一个名为"应用程序和服务日志"的目录.我想在此目录中为我的应用程序创建一个条目,并为其编写任何未经处理的事件.不幸的是,我找不到任何文档. 这甚至可能吗?如果是这样,如何? 谢谢! 解决方案 您可以使用此方法创建一个日志条目: public static void CreateEventSource( string YourApplication, string YourLogName ) 在 doc: 1 : http://msdn.microsoft.com/en-us/library/2awhba7a.aspx 示例: eventlog
26 2024-04-20
编程技术问答社区
EventLog WriteEntry不写到指定的日志,而是写到应用程序日志。
我有一个应用程序,我想编写事件日志的条目 记录仪是通过MEF实例化的. 我创建了一个派生类,以便能够使用它的日志初始化. 我的代码如下: public class WinEventLog : EventLog, ILogger { private const string LOG_SourceName = "DataGen_Source"; private const string LOG_SysLogName = "Pool_Log"; private bool _isInitialized = false; public WinEventLog() : base() { Initialize(); } public void LogMessage(MessageLevel level, string message) { WriteEntry(messag
22 2024-04-20
编程技术问答社区
将事件记录整理成文件夹
我想创建多个服务,希望它们在我指定的同一目录/文件夹下的日志条目中日志记录,因此当我打开Windows Event Viewer时,我可以看到它们都放在一个文件夹中.例如,service1将登录到service1_log,service2将登录到service2_log,而service1_log和service2_log都将驻留在一个名为MyServices的文件夹中. 我在Windows事件日志API或任何其他适合此问题的API中都没有找到任何东西..我可以在Windows Event Viewer中看到的文件夹,但我只能在那里的日志层次结构的根部创建日志. 预先感谢 tomas 解决方案 Windows事件日志不会登录目录.但是,事件日志分为几个日志( application , system , security 等),它们在事件查看器中作为文件夹显示.您可以通过调用 EventLog.CreateEventSource . 但是,我不建议您创建自己的日志.相反,
12 2024-04-19
编程技术问答社区