如何在系统级加载环境变量而不是在Log4Net中的用户级加载环境变量

时间:2017-07-26 14:31:21

标签: c# windows environment-variables log4net

我已经在这里挣扎了几个小时但没有用。

我需要使用名为 TMP TEMP 的环境变量,该变量包含我要记录的Windows Temp文件夹。通常它是C:\Windows\Temp(当然这个值可能会因系统而异,这就是我需要变量值的原因)。

问题是每个键都有两个值:

enter image description here

我使用以下XML来指示Log4Net(在C#下)加载临时文件夹(粘贴相关部分):

  <appender name="SomeFileAppender" type="log4net.Appender.RollingFileAppender">
  <file value="${TMP}\Logs\SomeLogFileName.log" />
  <appendToFile value="true" />

当我运行程序时,它会将日志写入用户临时文件夹: C:\Users\myuser\AppData\Local\Temp\Logs

问题是如何强制Log4Net从系统级别而不是用户级别获取TMP / TEMP的环境变量?

2 个答案:

答案 0 :(得分:1)

如果您的应用程序由特定用户运行,您通常只想写入特定于用户的目录。 C:\ Windows \ TEMP是PC的所有用户共享的目录。如果您真的想写信,那么通常您希望以系统用户身份运行您的应用程序。

(这只是典型情况;授予可能存在您希望特定用户写入系统范围目录的个别情况。)

现在,如果您以SYSTEM身份运行,您将在您的环境中获取TMP / TEMP的系统级定义。

答案 1 :(得分:0)

如果确实@JeroenMostert是正确的,并且不可能(没有转向注册表),我使用了WINDIR环境变量(值为 C:\ Windows )作为一个解决方案,我接下来将展示。

但是,如果有人想出更好的答案,我会很高兴。

  <appender name="SomeFileAppender" type="log4net.Appender.RollingFileAppender">
  <file value="${WINDIR}\temp\Logs\SomeLogFileName.log" />
  <appendToFile value="true" />