J'ai eu des difficultés pendant quelques heures sans succès.Comment charger la variable d'environnement au niveau du système et pas au niveau utilisateur dans Log4Net
-je utiliser une variable d'environnement appelée TMP
ou TEMP
, qui détiennent le dossier Temp Windows auquel je veux vous connecter. Habituellement, c'est C:\Windows\Temp
(bien sûr, cette valeur peut changer d'un système à l'autre, c'est pourquoi j'ai besoin de la valeur de la variable).
Le problème est qu'il ya deux valeurs pour chacune de ces touches: pour charger le dossier temporaire (collé la partie correspondante)
J'utilise le code XML suivant pour instruire Log4Net (en C#):
<appender name="SomeFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="${TMP}\Logs\SomeLogFileName.log" />
<appendToFile value="true" />
Quand je courais mon programme, il écrit le journal dans le dossier temp utilisateurs: C:\Users\myuser\AppData\Local\Temp\Logs
La question est de savoir comment forcer Log4Net à prendre la variable d'environnement de TMP/TEMP à partir du niveau du système et pas au niveau de l'utilisateur?
Vous ne pouvez pas. Ce dialogue présente les variables comme s'il y avait une hiérarchie séparée pour les programmes à accéder - il n'y en a pas. Les variables système sont prises, puis les variables utilisateur sont ajoutées/mises à jour, puis * que * est passé en tant que bloc d'environnement entier pour toute application. Le registre stocke ces variables séparément, mais les applications n'y accèdent pas séparément. Ce n'est pas spécifique à log4net. Y a-t-il une raison pour laquelle vous ne spécifiez pas simplement votre propre variable globale qui n'est * pas * surchargée au niveau de l'utilisateur? Les utilisateurs réguliers ne peuvent même pas accéder à 'C: \ Windows \ Temp' par défaut. –
Si vous avez absolument besoin de la valeur définie au niveau système pour cette variable d'environnement, vous devez l'extraire du registre ('HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment') et configurer l'appender à runtime. Mais je ne vois pas de grand avantage par rapport à cela en mettant simplement le chemin dans '.config'. Ce n'est pas un fardeau pour les intégrateurs de devoir modifier la configuration de votre application, s'ils sont déjà allés jusqu'à changer l'emplacement par défaut des fichiers temporaires. –
Merci @JeroenMostert. J'ai utilisé la variable WINDIR comme solution de contournement. Appeler le registre semblait hacky. – ilans