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

本文关键字:APPDATA 创建 文件夹 批处理文件 开始 WPF | 更新日期: 2023-09-27 18:28:27

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

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

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

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

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

有人理解这种行为吗?

感谢

===编辑===

我的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>

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

这就是解决我的问题的原因:

替换此:

 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不在默认打开命令提示符的文件夹中。