我正在为支持 Vista 及更高版本的应用程序制作 Windows 事件日志。我为每个事件创建了一个清单,但是我遇到了 win:Xml 的输出类型的问题。以下是我为事件模板中的数据指定的内容。
<data name="StackTrace" inType="win:UnicodeString" outType="win:Xml">
</data>
我想将 StackTrace 设置为在事件日志中显示为 XML 格式。StackTrace 必须使用格式正确的 XML 输入。但是,我仍然看到它在事件日志查看器中显示为 string(xs:string)。
你知道我做错了什么吗?我怎样才能正确地做到这一点?
下面如果更新我的代码:
const int NUM_OF_DATADESC = 6;
EVENT_DATA_DESCRIPTOR eventDataDesc[NUM_OF_DATADESC];
evDesc.Level = uLevel;
evDesc.Channel = nChannel;
evDesc.Keyword |= uKeyword;
for (int i = 0; i < NUM_OF_DATADESC; i++)
{
if (strings[i] != NULL)
EventDataDescCreate(&eventDataDesc[i], strings[i], ((ULONG)wcslen(strings[i])+1)*sizeof(WCHAR));
else
EventDataDescCreate(&eventDataDesc[i], L"", sizeof(WCHAR));
}
BOOL s = WriteEvent(evDesc,NUM_OF_DATADESC,&eventDataDesc[0]);
BOOL WriteEvent(EVENT_DESCRIPTOR eventID,DWORD userDataCount,PEVENT_DATA_DESCRIPTOR userData)
{
REGHANDLE hPub = NULL;
ULONG res = EventRegister(&MYCOMPANE_MYAPP_MYCOMPONENT, NULL, NULL, &hPub);
if (ERROR_SUCCESS != res){
return FALSE;
}
res = EventWrite(hPub, &eventID, userDataCount, userData);
if (ERROR_SUCCESS != res){
return FALSE;
}
EventUnregister(hPub);
return TRUE;
}
代码工作正常,但只有输出类型 = win:Xml 的问题。