2014-10-30 47 views
0

我正面臨一個奇怪的問題,我希望你們中的任何一位能幫助我。WPF從批處理文件啓動不會在APPDATA中創建文件夾

我做了一個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> 
+0

可能是UAC問題。你想在哪裏登錄?你的log4net配置是怎樣的? – 2014-10-30 22:22:25

+0

添加了配置文件。我認爲這也是UAC問題,但是如果我打開命令行並通過它打開應用程序,它就可以工作。如果我這樣做,但從批處理文件它不:\ – sexta13 2014-10-30 22:24:09

+0

而你的批處理文件真的只是調用wpf應用程序?順便說一句:你爲​​什麼不從Lync調用wpf應用程序?爲什麼通過bat文件調用它? – 2014-10-30 22:29:19

回答

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文件打開一個命令提示符它可能與和log4net.config不是在命令提示符下是默認打開的文件夾中。

相關問題