System.Diagnostics.EventLog类提供了与Windows事件日志交互的方法.我一直用它来进行简单的记录......
System.Diagnostics.EventLog.WriteEntry("MyEventSource", "My Special Message")
Run Code Online (Sandbox Code Playgroud)
有没有办法使用.NET在生成的事件日志条目中设置用户信息?
有没有办法获得服务上次在C#中启动的日期/时间?
我现在正在使用此代码来检查服务的状态:
ServiceController sc = new ServiceController(serviceName);
// check sc.status for "Running" etc... with a Switch statement...
Run Code Online (Sandbox Code Playgroud)
我可以用这个对象吗?还是需要WMI?
原因:我正在编写一个小BizTalk监视器,常见的问题是人们经常忘记在部署后重新启动BizTalk服务(主机实例).我想展示它上次开始的时间.
我正在尝试修改已经编写的Windows服务.
我看到源有一个System.diagnostic.EventLog对象,它记录了服务的不同操作.
我想知道如何阅读这个日志.从语义来看,似乎Eventlog正在记录几个服务操作.
这个日志存储在哪里,我怎么能看到它,我需要访问它,因为我的服务有时会间歇性地停止.
我试图谷歌它但没有找到任何可靠的答案.简单地说问题是什么是一个事件,我如何使用它.
我正在尝试将我的.Net Windows服务转到自定义事件日志.我正在使用EventLogInstaller安装应用程序时创建事件日志和源.我在这里读到,Windows注册源需要一段时间,因此他们建议您在尝试写入日志之前重新启动应用程序.
由于这是Windows服务,我不想强制重新启动计算机或让用户手动启动服务,因此我使用此代码等待日志存在,然后自动启动服务.
while (!(EventLog.Exists("ManageIT") || EventLog.SourceExists("ManageIT Client Service")))
{
Thread.Sleep(1000);
}
System.ServiceProcess.ServiceController controller = new System.ServiceProcess.ServiceController("ManageIT.Client.Service");
controller.Start();
Run Code Online (Sandbox Code Playgroud)
我的问题是来自服务的事件仍然写入应用程序日志,虽然我可以在注册表编辑器中看到我的自定义日志,但它不会显示在Windows 7事件查看器中.
任何帮助都感激不尽.
我正在使用WIX为我的应用程序创建一个安装程序.到目前为止一切正常.但是,我正在尝试在安装期间创建一个新的事件源,但这不会按预期工作.
我已经在这里阅读并理解了这个问题,但我有一个不同的情况,其中给定的解决方案似乎不能正常工作.以下是不同的做法:
WixNetFxExtension来确定.NET 3.5是否作为启动条件安装.WixUtilExtension到,因为它描述了用于32位/ 64位构建配置的东西在这里我想做的是:在进行32位安装时使用32位框架的事件消息文件,否则使用64位框架的事件消息文件.
上面链接的SO问题中的一条评论建议使用以下内容让系统使用32位框架的事件消息文件:
<util:EventSource
Log="Application"
Name="*source name*"
EventMessageFile="[NETFRAMEWORK20INSTALLROOTDIR]EventLogMessages.dll"/>
Run Code Online (Sandbox Code Playgroud)
我修改了这个来解释这两种类型的设置:
<?if $(var.Platform) = x64 ?>
<util:EventSource Log="..." Name="..." EventMessageFile="[NETFRAMEWORK20INSTALLROOTDIR64]EventLogMessages.dll" />
<?else ?>
<util:EventSource Log="..." Name="..." EventMessageFile="[NETFRAMEWORK20INSTALLROOTDIR]EventLogMessages.dll" />
<?endif ?>
Run Code Online (Sandbox Code Playgroud)
在文件的开头,相同的<?if ...条件工作,相应地改变产品和foldernames.
代码上面的一些代码我正在使用以下代码来允许.NET Framework检测:
<PropertyRef Id="NETFRAMEWORK35"/>
<PropertyRef Id="NETFRAMEWORK20"/>
<Condition Message="...">
<![CDATA[Installed OR NETFRAMEWORK35]]>
</Condition>
Run Code Online (Sandbox Code Playgroud)
当我运行安装程序时,一切似乎都有效,也创建了事件源,我也可以从我的应用程序中使用它,但是,我仍然得到未找到事件消息文件的信息.检查注册表我发现消息文件的路径丢失了:
EventMessageFile REG_EXPAND_SZ EventLogMessages.dll
Run Code Online (Sandbox Code Playgroud)
我期望32位/ 64位框架的路径也存在,但它似乎并没有被假定.
我在这做错了什么?
你好有人知道怎么读.evt /.evtx这是Windows事件日志文件读取不使用提供的api,我想用FILE I/Oapis 读取它们C/C++.
或者如何将这些文件转换成.txt,我知道splunk这样做但不确定他们是如何做到这一点的.
我有以下命令,它提供了我需要的信息,但我需要进一步过滤它:
Get-EventLog -LogName Security -ErrorAction SilentlyContinue | Select TimeWritten, ReplacementStrings | Export-Csv output.csv
Run Code Online (Sandbox Code Playgroud)
这提供了许多条目,例如:
09/11/2012 08:09:27 {S-1-5-18, SYSTEM, NT AUTHORITY, 0x3e7...}
Run Code Online (Sandbox Code Playgroud)
我想删除ReplacementStrings中以"{S-1-5"开头的任何条目,但我尝试使用Where-Object并且-notlike没有任何区别!
我遇到的另一个问题是没有Export-Csv output.csv添加它在屏幕上显示就好了,但是它会像这样写入文件:
"09/11/2012 09:22:05","System.String[]"
Run Code Online (Sandbox Code Playgroud) 我正在开发一个项目,需要经常检查某些事件的Windows事件日志.我在想:
__PRE__
那么,当事件发生时(即事件id = 00001),我可以尽快在代码中获得通知?我正在使用c#.如果无法做到这一点,那么我将不得不继续搜索效率不高的事件日志.
谢谢