如何在系统级别而不是 Log4Net 中的用户级别加载环境变量
How to to load environment variable on System level and not on User level in Log4Net
我为此苦苦挣扎了几个小时,但无济于事。
我需要使用名为 TMP
或 TEMP
的环境变量,其中包含 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 的系统级定义。
我为此苦苦挣扎了几个小时,但无济于事。
我需要使用名为 TMP
或 TEMP
的环境变量,其中包含 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 的系统级定义。