5

我有一个需要写出日志的 winforms 应用程序。该应用程序还需要在没有 UAC 警告的情况下运行并使用非管理员帐户。

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

如果所有用户都可以写入同一组日志文件,则加分。

4

2 回答 2

6

您不能(不应该)对路径进行硬编码。相反,通过调用 SHGetFolderPath 询问 Windows 将其存储在哪里,该路径可用于返回当前用户(或所有用户)的 AppData 目录的位置。

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

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

请注意,对路径进行一次性查询、转换为绝对字符串并将其存储在您的设置中是很危险的。因为Windows可以改变它。他们可以加入域、升级 windows 等,windows 确实可以移动你的文件。如果您然后指向旧位置,而不再次询问“此文件夹在哪里”,您将中断。去过也做过...

于 2010-05-11T20:34:43.480 回答
1

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

于 2010-05-11T21:21:40.957 回答