我有一个Windows表单应用程序,它使用log4net写入日志文件。 app.config文件中的日志文件路径定义为:
<file type="log4net.Util.PatternString" value="Logs/LogFileName" />.
我有一个msi安装项目,它安装了上面的应用程序。我在开发机器上安装App,运行已安装的App,并按预期在目录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);
代码,有人可以请一些亮点。
答案 0 :(得分:8)
正如其他人所说,不要以管理员身份运行来解决这个问题。写入您有权访问的文件夹/文件。
您可以在配置中展开环境变量以获取特殊文件夹:
(或者,正如Jon Skeet在此问题的已删除帖子中所推荐的那样,一篇更通用的文章:Where Should I Write Program Data Instead of Program Files?)
尝试:
${LocalAppData}/MyProgram/Logs/Filename
或者只是:
${AppData}/MyProgram/Logs/Filename
至于选择这两个中的哪一个 - 我不确定“漫游”是什么,所以我不知道为什么你更喜欢AppData
或LocalAppData
。可能值得一个不同的问题:)
答案 1 :(得分:6)
这是一个权限问题。在Windows 7标准中,用户无法写入Program Files
目录。因此,如果您没有以管理员身份运行应用程序,则Log4Net无法创建此子目录。在安装应用程序时,您必须向Logs/LogFileName
目录的任何人授予写入权限,或者将日志文件放在相应的c:\users\username\Application Data\AppName
文件夹中。
答案 2 :(得分:1)
在Windows7上,您应该写入C:\Users\<CurrentUser>
文件夹。您可以在此处创建installlog
文件夹。