WPF从批处理文件开始不在APPDATA中创建文件夹

时间:2014-10-30 22:18:57

标签: c# batch-file log4net

我面临一个奇怪的问题,我希望你们中的任何人都可以帮助我。

我已经制作了一个将从Lync 2013自定义菜单命令启动的WPF应用程序。 如果我理解得很好,基本上它会启动批处理文件,然后执行我的应用程序。

应用程序有log4net来记录应用程序中的错误,如果我启动应用程序隔离(不是来自Lync),则会在log4net.config(ProgramData或Roaming文件夹)中的位置创建一个文件夹。

从Lync应用程序启动时,不会创建这些文件夹。

我可以模拟这个,如果我创建一个批处理文件,并在其中我调用我的应用程序....如果我这样做,文件夹也不会创建。

有没有人理解这种行为?

由于

=== EDIT ===

我的log4net.config

<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
      <filter type="log4net.Filter.LevelRangeFilter">
        <levelMin value="DEBUG" />
        <levelMax value="OFF" />
      </filter>

      <param name="AppendToFile" value="true"/>
      <file value="${AppData}\AppName\Logs\log" />
      <staticLogFileName value="false"/>
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <datePattern value=" yyyy-MM-dd&quot;.txt&quot;"/>

      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger: %message%newline"/>
      </layout>     
    </appender>

1 个答案:

答案 0 :(得分:0)

这就解决了我的问题:

替换这个:

 FileInfo configFileInfo = new FileInfo("log4net.config");
 log4net.Config.XmlConfigurator.ConfigureAndWatch(configFileInfo);
 log = LogManager.GetLogger(typeof(Log));

由此:

 var log4NetConfigDirectory = AppDomain.CurrentDomain.RelativeSearchPath ?? AppDomain.CurrentDomain.BaseDirectory;
var log4NetConfigFilePath = Path.Combine(log4NetConfigDirectory, "log4net.config");
log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(log4NetConfigFilePath));
log = LogManager.GetLogger(logClass);

我认为bat文件打开cmd提示符并且log4net.config不在默认情况下打开命令提示符的文件夹中可能是相关的。