我有一个需要写出日志的 winforms 应用程序。该应用程序还需要在没有 UAC 警告的情况下运行并使用非管理员帐户。
在不违反默认安全设置的情况下,我可以在哪里写入日志?此外,这必须适用于 Windows XP、Vista 和 7。
如果所有用户都可以写入同一组日志文件,则加分。
我有一个需要写出日志的 winforms 应用程序。该应用程序还需要在没有 UAC 警告的情况下运行并使用非管理员帐户。
在不违反默认安全设置的情况下,我可以在哪里写入日志?此外,这必须适用于 Windows XP、Vista 和 7。
如果所有用户都可以写入同一组日志文件,则加分。
您不能(不应该)对路径进行硬编码。相反,通过调用 SHGetFolderPath 询问 Windows 将其存储在哪里,该路径可用于返回当前用户(或所有用户)的 AppData 目录的位置。
MSDN 文章,用 C 解决方案:http: //support.microsoft.com/kb/310294
有用的 Delphi 示例: http ://delphi.about.com/od/kbwinshell/a/SHGetFolderPath.htm
请注意,对路径进行一次性查询、转换为绝对字符串并将其存储在您的设置中是很危险的。因为Windows可以改变它。他们可以加入域、升级 windows 等,windows 确实可以移动你的文件。如果您然后指向旧位置,而不再次询问“此文件夹在哪里”,您将中断。去过也做过...
使用SHGetFolderPath,您可以选择使用每个用户或全局日志文件目录。如果您使用CSIDL_COMMON_APPDATA,则:“此信息不会漫游,任何使用计算机的人都可以使用。” 这听起来像是你想要的。