我有一个包含多个事件和两个通道的清单文件。我通过 mc 命令生成包含和资源文件:
mc -um manifest.man
我将资源文件链接到应用程序中。
我通过 wevtutil 命令在系统中安装清单:
wevtutil.exe im manifest.man
在应用程序中,我使用 EventRegister 进行初始化日志,使用 EventWrite 进行日志写入。生成日志事件的下一个代码返回 ERROR_SUCCESS: EVENT_DATA_DESCRIPTOR 数据;
ULONG writeEvent(const std::string& message){
std::string log_message_str( message );
EVENT_DATA_DESCRIPTOR data;
EVENT_DESCRIPTOR description;
EventDataDescCreate( &data, message.c_str(), static_cast<ULONG>(log_message_str.size() + 1) );
return EventWrite(log_handle, &description, 1, &data);
}
此外,我向我的 LocalService 应用程序授予读取权限:
icacls "service_win.exe" /grant "NT AUTHORITY\LocalService":R /Q
我使用“NT AUTHORITY\LocalService”帐户启动我的应用程序,例如服务:
sc.exe create service_win binpath=D:\service_win.exe type=own obj='NT AUTHORITY\LocalService'
net start service_win
我 manifest.man 中声明的频道已添加到 WinEvents 日志中,但为空。在应用程序中,我每隔一秒通过 writeEvent 写入日志,结果为 ERROR_SUCCESS,但我的日志文件仍然为空。
更新:
我创建了带有重现步骤的github 存储库