【问题标题】:WinEvent Logs and QFileSystemWatcherWinEvent 日志和 QFileSystemWatcher
【发布时间】:2015-04-12 20:07:26
【问题描述】:

我尝试将 WinEvent Logs Windows7 添加到 QFileSystemWatcher。但是,addPath() 方法返回 false 值。

qDebug() << m_watcher->addPath("C:/Windows/System32/winevt/Logs/Application.evtx"); // false

尝试添加 winevt 文件夹后得到的结果相同:

qDebug() << m_watcher->addPath("C:/Windows/System32/winevt"); // false

Winevt 文件夹具有只读属性,我不能修改它(更改后,应用,关闭和重新打开属性有旧的保留)。 我在 QFileSystemWatcher 文档中阅读:

监视失败的原因通常取决于系统,但可能包括资源不存在、访问失败或监视总数限制(如果平台有)。

但我不知道如何找到故障源以及如何修复它。 提前致谢。

【问题讨论】:

  • 您是否以管理员身份运行应用程序?
  • 是的,但这不是原因。我找到了解决办法。

标签: windows qt logging qt5 qfilesystemwatcher


【解决方案1】:

我相信您在 64 位操作系统上获得了文件系统重定向。

有两种方法可以解决这个问题:

1) 将您的应用程序构建为 64 位。 2) 通过调用Wow64DisableWow64FsRedirection 显式禁用系统重定向。

如果您使用第二种解决方案并且需要在 Windows XP 32 位上运行您的应用程序,我建议您像以下示例一样动态调用 WinAPI:

#include <qt_windows.h>

#if defined(_WIN32) //Check if program is compiled in 32 bits (64 bits does not have redirection)
    SYSTEM_INFO SystemInfo = {0};
    GetNativeSystemInfo(&SystemInfo);

    if (SystemInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) //Check if processor is 64 bits
    {
        //Call the Wow64DisableWow64FsRedirection api dynamically
        typedef BOOL(STDAPICALLTYPE *tWow64DisableWow64FsRedirection)(PVOID);
        tWow64DisableWow64FsRedirection pWow64DisableWow64FsRedirection = (tWow64DisableWow64FsRedirection)QLibrary::resolve("Kernel32", "Wow64DisableWow64FsRedirection");
        if (pWow64DisableWow64FsRedirection)
            pWow64DisableWow64FsRedirection(NULL);
    }
#endif

【讨论】:

    【解决方案2】:

    在另一个论坛上找到解决方案,用户提供link

    Sysnative 文件夹可以访问。

    谢谢大家。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-14
      • 2012-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多