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

时间:2014-04-21 17:50:03

标签: c++ qt windows-7

我的应用需要编写和维护日志文件,而不是在管理模式下运行。我的问题是我的应用程序在这种情况下可以写什么路径。我怎么能获得这条路?

2 个答案:

答案 0 :(得分:1)

有两个不错的选择:

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

    由于这是一个内置功能,任何技术人员都会了解它并能够轻松找到您的日志文件。它还与集中管理系统非常互操作。

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

    对于关于特定计算机特定内容的日志文件,我会说这是本地(非漫游)应用程序数据,因此您需要Local App 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));
    

答案 1 :(得分:0)

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