我一直在这里挣扎了几个小时,但没有效果。如何在系统级别加载环境变量,而不是Log4Net中的用户级别
我需要使用一个名为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')并配置appender在运行。但相比于简单地将路径放在'.config'中,我没有看到任何优势。如果集成商不得不更改应用程序的配置,并且已经更改了临时文件的默认位置,那么这对集成商来说并不是很大的负担。 –
谢谢@JeroenMostert。我使用WINDIR变量作为解决方法。调用注册表似乎很难。 – ilans