在windows 7中用非管理模式运行的应用程序编写日志文件

Writing a log file with app running in non-admin mode in windows 7

本文关键字:应用程序 文件 日志 运行 管理模式 windows      更新时间:2023-10-16

我的应用程序需要编写和维护一个日志文件,并且它不在管理模式下运行。我的问题是,在这种情况下,我的应用程序可以写入什么路径。我怎样才能走那条路?

有两个不错的选择:

  1. 使用Windows事件日志。您可以轻松地为应用程序创建自己的日志(如果您希望生成大量消息),也可以将消息添加到标准日志中(如果您只希望偶尔生成少量消息)。

    由于这是一个内置功能,任何技术人员都会了解它,并能够轻松定位日志文件。它与集中式管理系统的互操作性也很强。

  2. 写入保存在Application Data目录中的文本文件。这是应用程序应该存储非用户数据文件的地方,因为正如您所提到的,应用程序目录不是您可以拥有写入权限的目录

    对于特定计算机特定内容的日志文件,我认为这是本地(非漫游)应用程序数据,因此您需要本地应用程序数据文件夹。我确信有一个Qt包装器,但在Win32中,您将调用SHGetKnownFolderPath函数,指定KNOWNFOLDERIDFOLDERID_LocalAppData

    请记住,此函数分配内存来存储返回的字符串——完成后必须通过调用CoTaskMemFree来释放它。

    样本代码:

    // Retrieve the path to the local App Data folder.
    wchar_t* pszPath = 0;
    SHGetKnownFolderPath(FOLDERID_LocalAppData, 0, NULL, &pszPath);
    // Make a copy of that path.
    std::wstring path(pszPath);
    // Free the memory now, so you don't forget!
    CoTaskMemFree(static_cast<void*>(pszPath));
    

请参阅SHGetKnownFolderPath API,可能使用FOLDERID_LocalAppData选项。