web-dev-qa-db-fra.com

Environment.GetEnvironmentVariable ne trouvera pas de valeur variable

Pourquoi Environment.GetEnvironmentVariable("variableName") n'obtiendra-t-il pas la valeur d'une variable si l'appel est effectué à partir d'une méthode Web hébergée sur IIS et cela fonctionnera si je l'appelle à partir d'une application console sur le même machine?

Où dois-je configurer ces variables pour qu'elles soient visibles par les services Web IIS? Dois-je utiliser le deuxième paramètre de Environment.GetEnvironmentVariable(name, target) pour l'obtenir?

C'est en fait très simple:

[WebMethod(Description = "Gets the environment variable value.")]
public string GetEnvironmentVariable()
{
    return Environment.GetEnvironmentVariable("VARIABLE_NAME_HERE");
}

Et en passant, VARIABLE_NAME_HERE est défini au niveau du système et de l'utilisateur.

34
Lemmerich

Lisez ici pour plus d'informations:

tilisation de variables d'environnement système dans l'application .NET


Plus précisément:

Que sont les variables d'environnement système?

Les variables d'environnement sont des chaînes qui enregistrent des informations sur l'ensemble de l'environnement de votre système. Ces valeurs de chaîne sont dynamiques et peuvent affecter le comportement de votre système. Les variables d'environnement peuvent être classées en deux types principaux:

Variables système : elles affectent l'ensemble du système quel que soit l'utilisateur actuel. Ils sont définis par Windows et enregistrés dans le registre. Vous devez être administrateur pour pouvoir les modifier. Vous devez généralement redémarrer votre ordinateur pour que ces modifications soient effectives.

Variables utilisateur : elles affectent l'environnement actuel de l'utilisateur actuel du système. Ils peuvent être supprimés, modifiés et ajoutés par n'importe quel utilisateur du système. Ils sont utilisés par l'installation de Windows, par certains programmes et par les utilisateurs. Les modifications apportées à ces variables sont enregistrées dans le registre et prennent effet immédiatement.


Si vous essayez d'appeler une variable d'environnement qui n'existe pas sur votre ordinateur, vous aurez des problèmes. Vous devez essayer de trouver une variable qui existe sur votre machine locale, mais pas sur la machine hôte de votre service Web.

13
sergserg

J'ai rencontré le même problème, et grâce à @sergserg, j'ai trouvé cela et cela a fonctionné:

var value = Environment.GetEnvironmentVariable(key, EnvironmentVariableTarget.User)

Le bit important utilisait EnvironmentVariableTarget.User

26
Patrick Michalina

Le redémarrage de Visual Studio l'a corrigé pour moi (deviner IIS Express met également en cache ces valeurs).

24
Branden Barber

Votre besoin de redémarrer le IIS en utilisant la commande iisreset.

9
haishan