Vous pouvez utiliser Environment.SetEnvironmentVariable:
Environment.SetEnvironmentVariable("SomeVariable", "Some value", EnvironmentVariableTarget.User);
Le dernier paramètre déterminera la portée et la durée de la variable (soit processus, l'utilisateur ou la machine). Si vous voulez définir la variable pour la machine, vous devrez exécuter en tant qu'administrateur. Je remarque cependant que si vous exécutez une application console avec le code ci-dessus, la variable d'environnement n'est pas disponible jusqu'à ce que vous ouvriez une nouvelle fenêtre de commande (donc si vous exécutez l'application console à partir d'un fichier batch, la variable ne sera pas disponible pour le fichier batch, à moins qu'il y ait une astuce pour qu'il actualise l'ensemble des variables d'environnement qu'il voit). OK, je creusais avec ceci et il ne semble y avoir aucun moyen évident de faire en sorte que le fichier batch récupère un ensemble rafraîchi de variables d'environnement. Une solution de contournement que j'ai trouvée est d'avoir le code. Net écrire un fichier de commandes pour définir les variables, au lieu de les définir lui-même. Le script batch appelant peut alors exécuter le fichier batch créé pour avoir l'environnement mis en place:
.Net Console App:
static void Main(string[] args)
{
string outputFile = @"c:\temp\setvars.bat";
string variable = "set SomeVariable=Some value";
File.WriteAllText(outputFile, variable);
}
-fichier BAT:
call myconsoleapp.exe
call c:\temp\setvars.bat
echo %SomeVariable%
Vous me battez pour ça. Je pense que c'est une bonne solution, et j'ai eu une opinion un peu différente dans ma réponse. Je ne pense pas qu'il existe une autre façon «sympa» de le faire. – Xiaofu
Cette solution a fonctionné magnifiquement, dommage qu'il y ait cette limitation sur les variables d'environnement, mais une solution de contournement fera l'affaire. – benPearce