Skip to content

EventLogHelperPublic 模块

一个低级辅助模块,写入Windows在渲染事件日志消息时读取的注册表条目。大多数项目不直接调用此模块——EventLog.Register 包装了该调用并自动从 T2 类型参数提供类别计数。仅在通用 EventLog 类之外注册源时使用 EventLogHelperPublic(例如,当类别计数无法从声明的枚举推导时)。

RegisterEventLogInternal

写入将正在运行的EXE声明为事件源的消息提供程序的注册表条目。

语法:EventLogHelperPublic.RegisterEventLogInternal LogPath, CategoryCount

LogPath
必需 命名源的 String。叶名称如 "MyService" 注册在 Application 日志下(内部重写为 "Application\MyService");完整路径如 "System\MyService" 注册在命名的父日志下。尾段是事件查看器 Source 列中显示的源名称。
CategoryCount
必需 给出为此源声明的类别数的 Long——对应类别枚举中的最大值。存储为注册表的 CategoryCount DWORD;事件查看器使用它来限制在EXE的消息表资源中查找类别字符串的范围。

创建 HKLM\SYSTEM\CurrentControlSet\Services\EventLog\<LogPath> 并写入:

  • EventMessageFile = App.ModulePath(正在运行的EXE;REG_SZ
  • CategoryMessageFile = App.ModulePathREG_SZ
  • CategoryCount = CategoryCountREG_DWORD

WARNING

RegisterEventLogInternal 写入 HKEY_LOCAL_MACHINE,需要管理员权限。通常的做法是从提升的安装程序中调用一次,而不是从应用程序的正常启动路径中调用。

如果注册表键无法打开以进行写入,RegisterEventLogInternal 引发运行时错误5,消息为 "Failed to register event log source (<LogName>)",其中 <LogName>LogPath 的尾段。典型原因是权限不足和 LogPath 的父日志(例如 "Application""System")不存在。

另见

twinBASIC及其LOGO版权为作者"韦恩"所有