EventLog,输出到系统事件日志

合集下载

C#操作windows事件日志项

C#操作windows事件日志项

C#操作windows事件⽇志项1///<summary>2///指定事件⽇志项的事件类型3///</summary>4public enum EventLogLevel5 {6///<summary>7///错误事件。

它指⽰⽤户应该知道的严重问题(通常是功能或数据的丢失)。

8///</summary>9 Error = 1,10///<summary>11///警告事件。

它指⽰并不⽴即具有重要性的问题,但此问题可能表⽰将来会导致问题的条件。

12///</summary>13 Warning = 2,14///<summary>15///信息事件。

它指⽰重要、成功的操作。

16///</summary>17 Information = 4,18///<summary>19///成功审核事件。

它指⽰当审核访问尝试成功(例如成功登录)时发⽣的安全事件。

20///</summary>21 SuccessAudit = 8,22///<summary>23///失败审核事件。

它指⽰当审核访问尝试失败(例如打开⽂件的尝试失败)时发⽣的安全事件。

24///</summary>25 FailureAudit = 16,26 }指定事件⽇志项的事件类型1public static class WebUtil2 {3///<summary>4///写⽇志信息5///</summary>6///<param name="Message">⽇志信息</param>7public static void WriteLog(string Message, EventLogLevel logLevel = rmation)8 {9string sourceName = "DemoEventLog";//Application-应⽤程序⽇志10 WriteCustomLog(sourceName, Message, logLevel);11 }12///<summary>13///写异常⽇志14///</summary>15///<param name="exp">异常信息</param>16public static void WriteLog(Exception exp, EventLogLevel logLevel = EventLogLevel.Error)17 {18string filepath = string.Empty;19try20 {21 filepath = HttpContext.Current.Request.AppRelativeCurrentExecutionFilePath;22 }23catch (Exception)24 {2526 }27 String Message = string.Format("\n\nURL:\n {0}\n\nMESSAGE:\n {1}\n\nSTACK TRACE:\n {2}", filepath, exp.Message, exp.StackTrace);28string sourceName = "DemoEventLog";//Application-应⽤程序⽇志29 WriteCustomLog(sourceName, Message, logLevel);30 }31///<summary>32///写异常⽇志33///设置:因为系统⽇志的操作是有权限控制的,所以我们还要把对系统⽇志操作的权限赋给⽤户,34///⽅法如下:“开始->运⾏”,输⼊命令,“regedt32”,找到“System->CurrentControlSet->Services->Eventlog”,35///选择“安全->权限->添加”,然后找到本机的“AspNet”⽤户,加进来并且给读取权限就好了,36///加进来后⽬录中会多⼀个“aspnet_wp account”37///系统出错后,会⾃动将出错信息记录到系统⽇志中,你可以在“开始->程序->管理⼯具->事件查看器”中发现⼀个新的项⽬“TownLog”,这便是记录出错信息的。

windows系统服务及SC命令

windows系统服务及SC命令

系统服务的备份与灾难保护
备份系统服务 (1)运行注册表编辑器,依次展开注册表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Serv ices。 (2)单击“文件→导出”菜单命令,在出现的对话框 中,单击“所选分支”选项,将此分支下的注册表内容 导出并保存为一个REG文件。如果需要恢复系统服务, 可以直接双击该REG文件导入注册表。
有些服务是必须设置为自动的,如Remote Procedure Call(RPC)。 由于依存关系或其他影响,其他的一些服务也必须设置为自动,这样 的服务最好不要去更改它,否则系统无法正常运行。

手动:如果一个服务被设置为手动,那么可以在需要时再运行它。
这样可以节省大量的系统资源,加快系统启动。

已禁用:此类服务不能再运行。这个设置一般在提高系统安全性时
11.Fast User Switching Compatibility FastUserSwitchingCompatibility(多用户快速切换服务)。 为在多用户状态下需要协助的应用程序提供管理。该服务进程名为 Svchost.exe。 依存关系:Terminal Services 建议:基于安全性考虑,如果不使用多用户环境,停止。
• 以管理员或 Administrators组成员身 份登录,单击“开始→运行” 菜单项,在出现的对话框 中键入“Services.msc”并 回车
• 单击“开始→控制面板→性
能和维护→管理工具→服 务”选项来启动该控制台

在服务控制台中,双击任 意一个服务,就可以打开 该服务的属性对话框,如 图所示。
+ System Application COMSysApp(COM+系统应用服务)。管理基于COM+组件的配置 和跟踪。该服务进程名为Dllhost.exe。 依存关系:Remote Procedure Call(RPC) 建议:如果COM+ Event System是一辆车,那么COM+ System Application就是司机,根据具体情况,启动。 7.Cryptographic Services CryptSvc(认证服务)。提供三种管理服务,编录数据库服务,它确 定Windows文件的签字;受保护的根服务,它从此计算机添加和删除受 信根证书机构的证书;密钥(Key)服务,它帮助注册此计算机获取证书。 如果此服务被终止,这些管理服务将无法正常运行。该服务进程名为 Svchost.exe。 依存关系:Remote Procedure Call(RPC) 建议:该服务即是Windows Hardware Quality Lab(WHQL)认证, 如果你使用Automatic Updates,启动。

NET编程实现对Windows事件日志的操作

NET编程实现对Windows事件日志的操作

.NET编程实现对Windows事件日志的操作1.Windows事件日志当没有图形用户界面的应用程序(例如组件、Web Service、Windows服务等)的某些特定事件发生时,应该把事件信息记录在某一个系统日志中,以便用户或管理员检查处理。

比如,应用程序不能正常启动、无法完成一个操作或内存不足导致性能下降时,将这些信息写入事件日志。

在Windows NT、Windows 2000和Windows XP系统中,提供有事件日志。

默认情况下有3个事件日志:系统日志(记录系统组件中发生的事件,如驱动程序的事件)、安全日志(记录安全改动和破坏安全许可的操作企图)和应用程序日志(记录注册应用程序发生的事件)。

当然,我们也可以创建自定义日志,但大多数程序都是将其事件写入标准的应用程序日志。

日志中可以记录5种类型的事件:⏹Information(信息):开始或停止一个程序时产生。

⏹Warning(警告):当一个可能在将来引发问题的事件发生时产生。

⏹Error(错误):当出现重要错误时产生。

⏹Success audit(审计成功):当一个访问操作成功时产生。

⏹Failure audit(审计失败):当一个访问操作失败时产生。

浏览Windows事件日志可以使用系统提供的事件查看器(Event Viewer),通过“控制面板”—“管理工具”—“事件查看器”,即可查看当前的事件日志情况。

当系统出现异常时,管理员可根据日志记载进行相应的处理,可以说事件日志在系统中起到了十分重要的作用。

2.演示程序介绍一般而言,对日志进行操作的程序多数没有操作界面,如系统服务、驱动程序等。

本例中我们使用一个简单的Windows程序来演示它的操作。

如图2所示,单击左侧按钮,将读取系统应用程序日志中指定事件源的日志项内容并显示在列表框中;单击中间按钮将向系统应用程序日志中写入一条信息;单击右侧按钮将新建一自定义日志并写入一条信息和一条警告。

Kerberos ID7 &Service Control Manager id7000 症状:域登录时间过长

Kerberos ID7 &Service Control Manager id7000 症状:域登录时间过长

1.失败于单点:它需要中心服务器的持续响应。

当Kerberos服务结束前,没有人可以连接到服务器。

这个缺陷可以通过使用复合Kerberos服务器和缺陷认证机制弥补。

2.Kerberos要求参与通信的主机的时钟同步。

票据具有一定有效期,因此,如果主机的时钟与Kerberos服务器的时钟不同步,认证会失败。

默认设置要求时钟的时间相差不超过10分钟。

在实践中,通常用网络时间协议后台程序来保持主机时钟同步。

3.管理协议并没有标准化,在服务器实现工具中有一些差别。

4.因为所有用户使用的密钥都存储于中心服务器中,危及服务器的安全的行为将危及所有用户的密钥。

5.一个危险客户机将危及用户密码。

在运行Windows 2000、Windows XP 或Windows Server 2003 的域控制器或成员计算机上,用户无法登录或经历长时间的等待文章编号: 883268 - 查看本文应用于的产品系统提示注意:本篇文章的内容适用于其他版本的Windows (不包括您正在使用的版本) 。

本篇文章的内容可能不适用您的电脑。

浏览Windows 7 帮助和支持中心展开全部 | 关闭全部症状在运行Microsoft Windows 2000、Microsoft Windows XP 或Microsoft Windows Server 2003 的域控制器或成员计算机上,您可能遇到以下一个或多个症状:∙在系统事件日志中记录以下错误信息:类型: 错误来源: 服务控制管理程序类别: 无事件ID: 7000用户: N/A描述:由于下列错误,Service Name服务启动失败:服务没有及时响应启动或控制请求。

注意:在此错误信息中,Service Name是“更多信息”一节中列出的服务之一。

∙系统事件日志中记录以下错误信息:类型: 错误来源: Kerberos类别: 无事件ID: 7用户: N/A描述:Kerberos 子系统遇到一个PAC 验证失败。

BIOS的中文对照表及BIOS详解

BIOS的中文对照表及BIOS详解

DisketteInterface
磁盘接口:使用该选项可以设置内置软盘驱动器的操作。设置为AUTO时,若装有软驱,则
内置磁盘控制器被禁用。若没有检测到磁盘控制器,则启用内置控制器。
PCSpeaker系统喇叭:使用该选项可启用或禁用系统喇叭
PrimaryVideoController主视频控制器:使用该选项可以在启动过程中指定视频控制
SetupPasswordSetup密码
PostHotkeys自检热键:该选项用来指定在开机自检(POST)时屏幕上显示的热键(F2
或F12)。
ChassisIntrusion
机箱防盗:该选项用来启用或禁用机箱防盗检测特征。设置为"Enable-Silent"时,启动
时若检测到底盘入侵,不发送警告信息。该选项启用并且机箱盖板打开时,该域将显示"D
CapabilitiesPorts,扩展功能端口)(默认)。
NumLock
数码锁定。设置在系统启动时数码灯(NumLockLED)是否点亮。设为"DISABLE"则数码灯
保持灭,设为"ENABLE"则在系统启动时点亮数码灯。
KeyboardNumLock
键盘数码锁:该选项用来设置在系统启动时是否提示键盘相关的错误信息。
SecondarySlaveDrive第二从驱动器
IDEDriveUDMA支持UDMA的IDE驱动器:使用该选项可以启用或禁用通过内部IDE硬盘接
口的DMA传输。
Hard-DiskdriveSequence硬盘驱动器顺序
SystemBIOSbootdevices系统BIOS启动顺序
USBdeviceUSB设备
SystemMemory系统内存

powershell常用命令

powershell常用命令

powershell常用命令近期因工作需要,经常使用powershell功能,总结以下常用命令,便于工作使用。

1.Get-Command :得到所有PowerShell命令,获取有关cmdlet 以及有关Windows PowerShell 命令的其他元素的基本信息。

包括Cmdlet、Alias、Function。

2.Get-Process :获取所有进程3.Get-Help :显示有关Windows PowerShell 命令和概念的信息4.Get-History :获取在当前会话中输入的命令的列表5.Get-Job :获取在当前会话中运行的Windows PowerShell 后台作业6.Get-FormatData :获取当前会话中的格式数据7.Get-Event :获取事件队列中的事件8.Get-Alias :获取当前会话的别名9.Get-Culture :获取操作系统中设置的当前区域性10. Get-Date :获取当前日期和时间11. Get-Host :获取表示当前主机程序的对象12.Get-Member :获取对象的属性和方法。

13.Get-Random :从集合中获取随机数或随机选择对象14.Get-UICulture :获取操作系统中当前用户界面(UI) 区域性设置15.Get-Unique :从排序列表返回唯一项目16.Get-Variable :获取当前控制台中的变量17.Get-EventLog :获取本地或远程计算机上的事件日志或事件日志列表中的事件18.Get-ChildItem :获取一个或多个指定位置中的项和子项19.Get-Content :获取指定位置的项的内容20.Get-ItemProperty :获取指定项的属性21.Get-Wmi :获取Windows Management Instrumentation (WMI) 类的实例或可用类的相关信息22.Get-Location :获取当前工作位置的相关信息(如:F:\Users\TaoMin )23.Get-PSDrive:获取当前会话中的Windows PowerShell 驱动器24.Get-Item:获取位于指定位置的项25.Get-Process :获取在本地计算机或远程计算机上运行的进程26.Get-Service :获取本地或远程计算机上的服务27.Get-Transaction :获取当前(活动)事务28.Get-ExecutionPolicy :获取当前会话中的执行策略二.Set类(set类命令一般都含有参数)1.Set-Alias :在当前Windows PowerShell 会话中为cmdlet 或其他命令元素创建或更改别名(替代名称)如:如:Set-Alias aaa Get-Command2.Set-PSDebug :打开和关闭脚本调试功能,设置跟踪级别并切换strict 模式3.Set-StrictMode :建立和强制执行表达式、脚本和脚本块中的编码规则4.Set-Date :将计算机上的系统时间更改为指定的时间5.Set-Variable :设置变量的值,如果该变量还不存在,则创建该变量6.Set-PSBreakpoint :在行、命令或者变量上设置断点7.Set-Location :将当前工作位置设置为指定的位置8.Set-Item :将项的值更改为命令中指定的值9.Set-Service :启动、停止和挂起服务并更改服务的属性10.Set-Content :在项中写入内容或用新内容替换其中的内容11.Set-ItemProperty :创建或更改某一项的属性值12.Set-WmiInstance :创建或更新现有Windows Management Instrumentation (WMI) 类的实例13.Set-ExecutionPolicy :更改Windows PowerShell 执行策略的用户首选项。

event.process(entry, result)用法

event.process(entry, result)用法

event.process(entry, result)看起来像是一个方法调用,但没有提供足够的上下文来确定它的确切用途。

然而,从方法的名称和参数可以猜测它的功能。

在很多编程场景中,event可能代表一个事件对象,它描述了某个特定时间点发生的事情。

process可能是处理或响应这个事件的方法。

参数entry和result可能是与该事件相关的数据或结果。

例如,在事件驱动的编程中,entry可能是一个事件日志条目或一个包含事件详细信息的对象,而result可能是一个处理该事件后的结果或输出。

以下是一个简单的示例,说明如何使用event.process(entry, result)方法:python复制代码class Event:def__init__(self):self.handlers = []def register_handler(self, handler):self.handlers.append(handler)def process(self, entry, result):for handler in self.handlers:handler(entry, result)# 示例处理器函数def handler(event, entry, result):print(f"Processing event: {entry}")print(f"Result: {result}")# 创建事件对象event = Event()# 注册处理器函数event.register_handler(handler)# 模拟一个事件日志条目和结果entry = "User logged in"result = "User successfully logged in"# 处理事件event.process(entry, result)在上面的示例中,我们定义了一个Event类,它具有处理事件的方法。

eventlog事件ID无法找到解决办法

eventlog事件ID无法找到解决办法

1.编写输出eventlog的代码如下#include "stdafx.h"#include <windows.h>int main(int argc, char* argv[]){const char *pMsg = "Error Message";HANDLE h = RegisterEventSource( NULL, "myapp" );ReportEvent( h, EVENTLOG_ERROR_TYPE,0, 0x3000, NULL, 1, 0, &pMsg, NULL );DeregisterEventSource( h );return 0;}2.此时输出在日志里面的eventlog前面有一段乱七八糟的东西,如图所示3.去除这段东西可以通过以下步骤进行做出evtest2.mc 文件,内容如下(中文系统);//必须的MessageIdTypedef=DWORDLanguageNames=(Chinese=0x0804:MSG00804);//需要添加的ID号在此添加MessageId=0x3000SymbolicName=MSG_XSVSTARTLanguage=Chinese要输出的内容( %1 )..日语系统如下LanguageNames=(Japanese=0x0411:MSG00411)MessageId=0SymbolicName=name0Language=Japaneseメッセージは「%1」です。

.4.cmd切换到.mc文件目录编译出dllmc evtest2.mc 生成出MSG00411.bin、evtest2.h、evtest2.rcset PATH=%PATH%;rc evtest2.rc 生成evtest2.RESlink /DLL /NOENTRY /MACHINE:IX86 evtest2.RES 生成evtest2.dll5.向注册表中插入dll在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\EventLog\Application\中新建APPL名的新值(例子中的myapp),新建KEYEventMessageFile 值设为生成dll所在的路径6.再次输出eventlog就如下图所示。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Effective C# 原则22:用事件定义对外接口Item 22: Define Outgoing Interfaces with Events可以用事件给你的类型定义一些外部接口。

事件是基于委托的,因为委托可以提供类型安全的函数签名到事件句柄上。

加上大多数委托的例子都是使用事件来说明的,以至于开发人员一开始都认为委托与事件是一回事。

在原则21里,我已经展示了一些不在事件上使用委托的例子。

在你的类型与其它多个客户进行通信时,为了完成它们的行为,你必须引发事件。

一个简单的例子,你正在做一个日志类,就像一个信息发布机一样在应用程序里发布所有的消息。

它接受所有从程序源发布的消息,并且把这些消息发布到感兴趣的听众那里。

这些听众可以是控制台,数据库,系统日志,或者是其它的机制。

就可以定义一个像下面这样的类,当消息到达时来引发事件:public class LoggerEventArgs : EventArgs{public readonly string Message;public readonly int Priority;public LoggerEventArgs ( int p, string m ){Priority = p;Message = m;}}// Define the signature for the event handler:public delegate void AddMessageEventHandler( object sender,LoggerEventArgs msg );public class Logger{static Logger( ){_theOnly = new Logger( );}private Logger( ){}private static Logger _theOnly = null;public Logger Singleton{get{return _theOnly;}}// Define the event:public event AddMessageEventHandler Log;// add a message, and log it.public void AddMsg ( int priority, string msg ){// This idiom discussed below.AddMessageEventHandler l = Log;if ( l != null )l ( null, new LoggerEventArgs( priority, msg ) );}}AddMsg方法演示了一个恰当的方法来引发事件。

临时的日志句柄变量是很重要的,它可以确保在各种多线程的情况下,日志句柄也是安全的。

如果没有这个引用的COPY,用户就有可能在if检测语句和正式执行事件句柄之间移除事件句柄。

有了引用COPY,这样的事情就不会发生了。

我还定义了一个LoggerEventArgs来保存事件和消息的优先级。

委托定义了事件句柄的签名。

而在Logger类的内部,事件字段定义了事件的句柄。

编译器会认为事件是公共的字段,而且会为你添加Add和Remove两个操作。

生成的代码与你这样手写的是一样的:public class Logger{private AddMessageEventHandler _Log;public event AddMessageEventHandler Log{add{_Log = _Log + value;}remove{_Log = _Log - value;}}public void AddMsg (int priority, string msg){AddMessageEventHandler l = _Log;if (l != null)l (null, new LoggerEventArgs (priority, msg));}}}C#编译器创建Add和Remove操作来访问事件。

看到了吗,公共的事件定义语言很简洁,易于阅读和维护,而且更准确。

当你在类中添加一个事件时,你就让编译器可以创建添加和移除属性。

你可以,而且也应该,在有原则要强制添加时自己手动的写这些句柄。

事件不必知道可能成为监听者的任何资料,下面这个类自动把所有的消息发送到标准的错误设备(控制台)上:class ConsoleLogger{static ConsoleLogger(){logger.Log += new AddMessageEventHandler( Logger_Log );}private static void Logger_Log( object sender,LoggerEventArgs msg ){Console.Error.WriteLine( "{0}:\t{1}",msg.Priority.ToString(),msg.Message );}}另一个类可以直接输出到系统事件日志:class EventLogger{private static string eventSource;private static EventLog logDest;static EventLogger(){logger.Log +=new AddMessageEventHandler( Event_Log );}public static string EventSource{get{return eventSource;}set{eventSource = value;if ( ! EventLog.SourceExists( eventSource ) )EventLog.CreateEventSource( eventSource,"ApplicationEventLogger" );if ( logDest != null )logDest.Dispose( );logDest = new EventLog( );logDest.Source = eventSource;}}private static void Event_Log( object sender,LoggerEventArgs msg ){if ( logDest != null )logDest.WriteEntry( msg.Message,rmation,msg.Priority );}}事件会在发生一些事情时,通知任意多个对消息感兴趣的客户。

Logger类不必预先知道任何对消息感兴趣的对象。

Logger类只包含一个事件。

大多数windows控件有很多事件,在这种情况下,为每一个事件添加一个字段并不是一个可以接受的方法。

在某些情况下,一个程序中只实际上只定义了少量的事件。

当你遇到这种情况时,你可以修改设计,只有在运行时须要事件时在创建它。

(译注:作者的一个明显相思就是,当他想说什么好时,就决不会,或者很少说这个事情的负面影响。

其实事件对性能的影响是很大的,应该尽量少用。

事件给我们带来的好处是很多的,但不要海滥用事件。

作者在这里没有明说事件的负面影响。

)扩展的Logger类有一个ponentModel.EventHandlerList容器,它存储了在给定系统中应该引发的事件对象。

更新的AddMsg()方法现在带一个参数,它可以详细的指示子系统日志的消息。

如果子系统有任何的监听者,事件就被引发。

同样,如果事件的监听者在所有感兴趣的消息上监听,它同样会被引发:public class Logger{private static ponentModel.EventHandlerListHandlers = new ponentModel.EventHandlerList();static public void AddLogger(string system, AddMessageEventHandler ev ){Handlers[ system ] = ev;}static public void RemoveLogger( string system ){Handlers[ system ] = null;}static public void AddMsg ( string system,int priority, string msg ){if ( ( system != null ) && ( system.Length > 0 ) ){AddMessageEventHandler l =Handlers[ system ] as AddMessageEventHandler;LoggerEventArgs args = new LoggerEventArgs(priority, msg );if ( l != null )l ( null, args );// The empty string means receive all messages:l = Handlers[ "" ] as AddMessageEventHandler;if ( l != null )l( null, args );}}}这个新的例子在Event HandlerList集合中存储了个别的事件句柄,客户代码添加到特殊的子系统中,而且新的事件对象被创建。

然后同样的子系统需要时,取回同样的事件对象。

如果你开发一个类包含有大量的事件实例,你应该考虑使用事件句柄集合。

当客户附加事件句柄时,你可以选择创建事件成员。

在.Net框架内部,System.Windows.Forms.Control类对事件使用了一个复杂且变向的实现,从而隐藏了复杂的事件成员字段。

每一个事件字段在内部是通过访问集合来添加和移除实际的句柄。

关于C#语言的这一特殊习惯,你可以在原则49中发现更多的信息。

你用事件在类上定义了一个外接的接口:任意数量的客户可以添加句柄到事件上,而且处理它们。

这些对象在编译时不必知道是谁。

事件系统也不必知道详细就可以合理的使用它们。

在C#中事件可以减弱消息的发送者和可能的消息接受者之间的关系,发送者可以设计成与接受者无关。

事件是类型把动作信息发布出去的标准方法。

相关文档
最新文档