代码之家  ›  专栏  ›  技术社区  ›  Ryan Michela

存储与xp、vista和windows 7兼容的日志文件的安全位置在哪里?

  •  5
  • Ryan Michela  · 技术社区  · 15 年前

    我有一个WinForms应用程序需要写日志。该应用程序还需要运行时无UAC警告,并使用非管理员帐户。

    哪里可以在不运行违反默认安全设置的情况下写入日志?此外,这必须在Windows XP、Vista和7上工作。

    如果所有用户都可以写入同一组日志文件,则需要额外的点数。

    2 回复  |  直到 7 年前
        1
  •  6
  •   Chris Thornton    15 年前

    你不能(不应该)硬编码路径。相反,通过调用shgetfolderpath来询问Windows存储它的位置,该路径可用于返回当前用户(或所有用户)的appdata目录的位置。

    msdn文章,带C解决方案: http://support.microsoft.com/kb/310294

    有用的Delphi示例: http://delphi.about.com/od/kbwinshell/a/SHGetFolderPath.htm

    请注意,对路径进行一次性查询、转换为绝对字符串并将其存储在设置中是很危险的。因为Windows可以更改它。它们可以加入域、升级窗口等,Windows可能确实会移动您的文件。如果你指向旧的位置,不再问“这个文件夹在哪里”,你就会崩溃。去过那里,做过那件事…

        2
  •  1
  •   the_mandrill    15 年前

    使用 SHGetFolderPath 您可以选择使用每个用户或全局日志文件目录。如果你使用 CSIDL_COMMON_APPDATA 然后:“这些信息不会漫游,而且对任何使用计算机的人都是可用的。”这听起来像是你想要的。