Comment définir la variable d'environnement système en C#?
Je suis en train de définir une variable d'environnement système dans mon application, mais un SecurityException
. J'ai testé tout ce que j'ai trouvé dans google, sans succès.
Voici mon code (notez que je suis administrateur de mon pc et exécuter VS2012 en tant qu'administrateur):
Tentative 1
new EnvironmentPermission(EnvironmentPermissionAccess.Write, "TEST1").Demand();
Environment.SetEnvironmentVariable("TEST1", "MyTest", EnvironmentVariableTarget.Machine);
Tentative 2
new EnvironmentPermission(EnvironmentPermissionAccess.Write, "TEST1").Demand();
using (var envKey = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Session Manager\Environment", true))
{
Contract.Assert(envKey != null, @"HKLM\System\CurrentControlSet\Control\Session Manager\Environment is missing!");
envKey.SetValue("TEST1", "TestValue");
}
Tentative 3
Aussi j'ai essayé d'adapter mon application avec des privilèges d'administrateur.
Avez-vous d'autres suggestions?
Vous ne pouvez pas simplement aller et obtenir la permission. Vous avez besoin d'être élevée. Et ce qui doit être fait lors du processus de démarrage.
OriginalL'auteur alex555 | 2013-10-31
Vous devez vous connecter pour publier un commentaire.
La la documentation vous dit comment faire.
Donc, vous avez besoin d'écrire pour le paramètre de registre qui vous sont déjà tenté de le modifier. Et puis diffuser un
WM_SETTINGCHANGE
message comme détaillé ci-dessus. Vous devez être exécuté avec des droits élevés dans l'ordre pour que cela réussisse.Un exemple de code:
Cependant, alors que ce code fonctionne, la .net framework fournit des fonctionnalités pour effectuer la même tâche beaucoup plus simple.
La la documentation pour les trois argument
Environment.SetEnvironmentVariable
surcharge dit:OpenSubKey
fonction se termine dans une exception, aussi, bien que la clé est disponibleComme je l'ai dit, vous devez exécuter cette élévation. Lorsque vous ne vous trouverez qu'il fonctionne. J'ai tester ce code, vous le savez!
Ah, ça fonctionne! Je vous remercie beaucoup. Est-il une commande ou un paramètre pour confirmer ce contrôle de compte d'utilisateur avertissement?
Si il y avait une telle chose, qui rendrait le contrôle de compte d'utilisateur ne serait pas inutile. Si vous souhaitez effectuer des tâches d'administration, vous avez besoin pour devenir admin. Il n'y a pas à sortir de cela.
Il est intéressant de noter que SetEnvironmentVariabl() fonction .Net Framework, même dans la dernière version 4.6.2 a un bug de ne pas avoir vérifié si vous êtes réglage variable de CHEMIN d'accès -- il les traite tous de la même manière, et il en silence à changer la clé de registre type pour le CHEMIN de REG_EXPAND_SZ REG_SZ et donc tuer la possibilité d'utiliser l'expansion des variables de CHEMIN d'accès. Inutile de dire que, de nombreux programmes (et les utilisateurs de l'ordinateur) s'appuient sur le CHEMIN de l'expansion.
OriginalL'auteur David Heffernan