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

How to to load environment variable on System level and not on User level in Log4Net

我为此苦苦挣扎了几个小时,但无济于事。

我需要使用名为 TMPTEMP 的环境变量,其中包含 Windows 我要登录的临时文件夹。通常它是 C:\Windows\Temp(当然这个值可能会从一个系统改变到另一个系统,这就是为什么我需要变量值)。

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

我使用以下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 的环境变量?

如果确实 @JeroenMostert 是正确的,但这是不可能的(不求助于注册表),我使用了 WINDIR 环境变量(值为 C: \Windows) 作为解决方法,我将在接下来展示。

不过,如果有人提出更好的答案,我会很高兴。

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

如果您的应用程序 运行 由特定用户使用,您通常只想写入特定于用户的目录。 C:\Windows\TEMP 是您 PC 的所有用户共享的目录。如果你真的想写那个,通常你会想 运行 你的应用程序作为系统用户。

(这只是典型情况;假设在个别情况下您希望特定用户写入系统范围的目录。)

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