【发布时间】:2019-11-06 10:05:34
【问题描述】:
我有一个包含多个事件和两个通道的清单文件。 我通过 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 repo 并带有复制步骤
【问题讨论】:
-
如果可能,请显示您的清单文件,以便我尝试重现此问题。
-
@RitaHan-MSFT 可能是我知道问题所在 - 我没有通过我的服务中的 StartTrace 命令启动 etw 会话。
-
@RitaHan-MSFT 我为这个问题创建了 github repo 和重现步骤 - github.com/synacker/windows_local_service
标签: c++ winapi logging windows-services wevtutil