【发布时间】:2023-03-10 23:30:01
【问题描述】:
我有一个简单的应用程序,它使用 Poco::Logger 和 Poco::EventLogChannel 将日志消息写入 Windows EventViewer。
在我以管理员权限运行我的程序后,HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog 下的注册表项被创建,CategoryMessageFile 和EventMessageFile 键指向Windows/System32 文件夹内的PocoFoundation.dll。我已将dll 复制到该位置。
但在 EventViewer 中会显示日志消息,但没有其他信息。它只是说:
找不到来自源 RRWS 的事件 ID 51001 的描述。无论是 引发此事件的组件未安装在您的本地计算机上或 安装已损坏。您可以在本地安装或修复组件 电脑。
如果事件源自另一台计算机,则必须保存显示信息 与事件。
活动中包含以下信息:
测试日志消息
消息资源存在,但在字符串/消息中找不到消息 表
对我来说,EventViewer 似乎无法找到 dll。
有人知道如何解决这个问题吗?
【问题讨论】:
-
您是“手动”(通过
explorer.exe或cmd.exe,它们是64 位进程)还是以编程方式从您的应用程序将DLL 复制到那里?假设您的应用程序是 32 位的(因为您使用的是PocoFoundation.dll,而不是PocoFoundation64.dll),由于 File System Redirector,DLL 可能最终位于不同的文件夹中(除非您明确指定Sysnative别名以绕过重定向) .另外,我认为您需要重新启动 Windows 事件查看器以刷新其注册事件源列表。 -
在注册表中设置值时,如果使用
%SystemRoot%等环境变量来定义路径,请务必使用REG_EXPAND_SZ而不是REG_SZ,如KB166902中所述。无论如何,为什么要将应用程序的 DLL 放入系统文件夹中?也许您的应用程序的安装文件夹会更好? -
@heapunderrun 我只是在检查它是否通常能够找到 dll 并检查不同的方法。我尝试了这两个版本,
PocoFoundation.dll和我的应用程序构建为32 Bit以及PocoFoundation64.dll和我的应用程序构建为64 Bit。注册我的应用程序后,我还重新启动了 PC。
标签: c++ windows poco-libraries event-viewer