一些大型应用程序会把他们的一些事件写到日志里面去,比如sql server,norton,iis等.我google了一下,网上关于这方面的资料并不是很完整,于是整理加工了一下. 下面是我看msdn,用google及自己摸索得到的一点体会,共享.
一.注册事件源.(需以administrator登陆本机才行)
你需要为你的应用程序注册一个事件源,以表明那些是属于你应用程序的事件.
HKEY hk;
ULONG disposition, allowed;
char szName[256];
strcpy(szName,"SYSTEM\\CurrentControlSet\\Services\\Eventlog\\Application\\");
strcat(szName,"CMCard");
if (RegCreateKeyEx(HKEY_LOCAL_MACHINE,szName,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,
NULL,&hk,&disposition))//为事件源建一个键
{
printf("Unable to create registry key");
return;
}
strcpy (szName,"%SystemRoot%\\System\\MYDLL.DLL");
if(RegSetValueEx(hk,"EventMessageFile",0,REG_EXPAND_SZ,(LPBYTE)szName,strlen(szName)+1))
{//为事件源指定一个解释事件的事件dll.
printf("Unable to create/set registryvalue (message DLL name)");
return;
}
allowed=EVENTLOG_ERROR_TYPE|EVENTLOG_WARNING_TYPE|EVENTLOG_INFORMATION_TYPE;
if (RegSetValueEx(hk,"TypesSupported",0,REG_DWORD,(LPBYTE)&allowed,sizeof(DWORD)))
{//为事件源指定类型
printf("Unable to create/set registry value (message types)");
return;
}
RegCloseKey(hk);二.编写事件dll.(用于解释事件id表示的内容)
用mc.exe(vc自带)编译一个*.mc文件,生成*.h,*.rc,*.bin,再用他们生成一个资源dll(用vc生成一个空
win32dll框架,把他们加进来编译),放system目录下.
下面是一个mc文件的样板:
;//begin==============================================================
;#ifndef __CMCARD_H__
;#define __CMCARD_H__
LanguageNames=(Chinese=2052:MSG0052)
SeverityNames=(Success=0x0:STATUS_SEVERITY_SUCCESS
Informational=0x1:STATUS_SEVERITY_INFORMATIONAL
Warning=0x2:STATUS_SEVERITY_WARNING
Error=0x3:STATUS_SEVERITY_ERROR
)
MessageId=1000 Severity=Success SymbolicName=CM_CARD_STATUS_OK
Language=Chinese
CMCard的状态良好.
.
MessageId=1001 Severity=Success SymbolicName=CM_CARD_STATUS_BED
Language=Chinese
CMCard出错了,原因可能是%1.
.
;#endif //__CMCARD_H__
;//end================================================================说明:默认的语言是英语,此时"LanguageNames="那句可以省略;
更多内容请看PCdog.com--Windows操作系统安装 Windows常见故障排除 Windows远程桌面的应用专题
