我有一个 Windows 窗体应用程序,它使用 log4net 写入日志文件。 app.config 文件中的日志文件路径定义为:
<file type="log4net.Util.PatternString" value="Logs/LogFileName" />.
我有一个 msi 安装项目,它安装上述应用程序。我在开发机器上安装应用程序,运行安装的应用程序,正如预期的那样,它在目录 InstallDirectory/Logs/ 下写入日志文件。开发机器有一个Win XP SP3,具有所有读写权限。
但是当我在装有 Windows 7 的测试机器上安装相同的程序并且我不确定权限时,没有“Logs”目录,也没有日志文件。
在这两种情况下,InstallDirectory 都是 C:\Program Files\Dir1\Dir2。
当我尝试找出文件在测试机器上的位置时,添加:
log4net.Appender.FileAppender rootAppender = (log4net.Appender.FileAppender)((log4net.Repository.Hierarchy.Hierarchy)LogManager.GetRepository()).Root.Appenders[0];
string filename = rootAppender.File;
MessageBox.Show(filename);
对于代码,有人可以解释一下吗?
- 为什么文件会丢失?
- Win 7 是否有任何不同的方法来处理 Windows 安装驱动器中的新文件?
正如其他人所说,不要以管理员身份运行来解决此问题。写入您有权访问的文件夹/文件。
您可以扩展配置中的环境变量来获取特殊文件夹:
https://web.archive.org/web/20121226213809/http://www.l4ndash.com/Log4NetMailArchive/tabid/70/forumid/1/postid/16299/view/topic/Default.aspx https://web.archive.org/web/20121226213809/http://www.l4ndash.com/Log4NetMailArchive/tabid/70/forumid/1/postid/16299/view/topic/Default.aspx
(或者,正如在这个问题上删除的帖子中所建议的那样乔恩·斯基特 https://stackoverflow.com/users/22656/jon-skeet,一篇更通用的文章:我应该在哪里写入程序数据而不是程序文件? http://blogs.msdn.com/b/cjacks/archive/2008/02/05/where-should-i-write-program-data-instead-of-program-files.aspx)
Try:
${LocalAppData}/MyProgram/Logs/Filename
Or just:
${AppData}/MyProgram/Logs/Filename
至于选择这两个中的哪一个 - 我不确定什么是“漫游”,所以我不知道你为什么喜欢AppData
or LocalAppData
。可能值得一个不同的问题:)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)