Impossible d’accéder à la variable d’environnement Windows avec C #

J’ai créé un installateur avec WiX. L’installateur a notamment défini une variable d’environnement PLUGIN_DIRECTORY (au niveau du système).

Dans un code C # que j’ai écrit, je dois accéder à cette variable pour pouvoir regarder un certain répertoire. Je le fais via le code suivant:

FileSystemWatcher water = new FileSystemWatcher(); watcher.Path = Environment.GetEnvironmentVariable("PLUGIN_DIRECTORY") + "\\"; 

Malheureusement (et quand je débogue), tout ce que watcher.Path est défini est “\”.

Dois-je redémarrer après l’installation? Je ne verrais pas pourquoi comme la variable est déjà définie. D’autres suggestions? Je ne reçois aucune erreur – ça ne fait que regarder le bon chemin.

Merci

Si vous aviez Visual Studio ouvert lorsque vous avez créé la variable d’environnement, je ne sais pas s’il le reprendra avant de fermer et de redémarrer VS. Lorsqu’un processus est démarré, il hérite des variables d’environnement de son processus parent. Je ne sais pas exactement comment VS lance un exécutable après l’avoir construit, mais c’est probablement un sous-processus et, par conséquent, ne récupère pas votre nouvelle variable d’environnement.

Juste pour être sûr, PLUGIN_DIRECTORY a-t-il quelque chose défini après l’exécution du programme d’installation?

Je suis désolé si je me trompe terriblement, je ne peux pas le confirmer car je n’ai pas de compilateur installé. Mais vous pouvez essayer d’utiliser: watcher.Path = Environment.GetEnvironmentVariable (“% PLUGIN_DIRECTORY%”) + “\”;

C’est-à-dire% PLUGIN_DIRECTORY% au lieu de PLUGIN_DIRECTORY.

J’espère que c’était utile

L’environnement système est hérité de parent, après la mise à jour, un autre processus ne peut pas être reconnu.

Nous pourrions actualiser l’environnement de processus par environnement de chargement de “machine” et enregistrer dans “processus”.

 ssortingng SysEnvir = System.Environment.GetEnvironmentVariable("Path", EnvironmentVariableTarget.Machine); System.Environment.SetEnvironmentVariable("Path", SysEnvir, EnvironmentVariableTarget.Process);