【发布时间】:2018-01-01 22:54:30
【问题描述】:
我已经为此苦苦挣扎了几个小时,但无济于事。
我需要使用名为 TMP 或 TEMP 的环境变量,其中包含我要登录的 Windows Temp 文件夹。通常是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 的环境变量?
【问题讨论】:
-
你不能。该对话框显示变量,就好像有一个单独的层次结构供程序访问一样——没有。获取系统变量,然后添加/更新用户变量,然后 that 作为任何应用程序的整个环境块传递。注册表单独存储这些变量,但应用程序不会单独访问它们。这不是 log4net 特有的。您是否有任何理由不简单地指定您自己的在用户级别不覆盖的全局变量?默认情况下,普通用户甚至无法访问
C:\Windows\Temp。 -
如果您绝对需要在系统级别为此环境变量定义的值,您需要从注册表 (
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment) 中提取它并在运行时配置附加程序。但是与简单地将路径放在.config中相比,我认为这没有什么太大的优势。如果集成商已经更改了临时文件的默认位置,那么更改应用程序的配置并不是什么大负担。 -
感谢@JeroenMostert。我使用 WINDIR 变量作为解决方法。调用注册表似乎很麻烦。
标签: c# windows environment-variables log4net