如何打开 windows' 特定于服务的事件日志
How to open windows' service-specific event log
我们需要以编程方式读取特定于服务的事件日志 "Microsoft-Windows-TerminalServices-LocalSessionManager/Operational"。以下代码
LPWSTR pwsLogName = L"Microsoft-Windows-TerminalServices-LocalSessionManager/Operational";
HANDLE hEventLog = OpenEventLog(nullptr, pwsLogName);
结果打开 "Application" 日志而不是必需的。
同时命令行实用程序 wevtutil 可以成功读取所需的日志:
wevtutil query-events Microsoft-Windows-TerminalServices-LocalSessionManager/Operational
我们做错了什么?
最后我们发现 OpenEventLog() 已死,我们需要使用 Evt* 函数(EvtQuery & 公司)
该行为是设计使然;参见:https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-openeventloga
待办事项:先检查注册表项是否存在,如果成功则使用openEventLog()
。
_stprintf_s(szKeyName, _T("System\CurrentControlSet\Services\EventLog\%s"),szLogName);
dwRet = RegOpenKey(HKEY_LOCAL_MACHINE, szKeyName, &hKey);
if (ERROR_SUCCESS == dwRet)
{
RegCloseKey(hKey);
// continue with openEventLog()
我们需要以编程方式读取特定于服务的事件日志 "Microsoft-Windows-TerminalServices-LocalSessionManager/Operational"。以下代码
LPWSTR pwsLogName = L"Microsoft-Windows-TerminalServices-LocalSessionManager/Operational";
HANDLE hEventLog = OpenEventLog(nullptr, pwsLogName);
结果打开 "Application" 日志而不是必需的。
同时命令行实用程序 wevtutil 可以成功读取所需的日志:
wevtutil query-events Microsoft-Windows-TerminalServices-LocalSessionManager/Operational
我们做错了什么?
最后我们发现 OpenEventLog() 已死,我们需要使用 Evt* 函数(EvtQuery & 公司)
该行为是设计使然;参见:https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-openeventloga
待办事项:先检查注册表项是否存在,如果成功则使用openEventLog()
。
_stprintf_s(szKeyName, _T("System\CurrentControlSet\Services\EventLog\%s"),szLogName);
dwRet = RegOpenKey(HKEY_LOCAL_MACHINE, szKeyName, &hKey);
if (ERROR_SUCCESS == dwRet)
{
RegCloseKey(hKey);
// continue with openEventLog()