2015-09-18 4 views
0

У меня Windows 7, и я использую этот код:Почему переменная среды не изменяется?

 string genericLib = ConfigurationManager.AppSettings["GenericLib"]; 
     if (!string.IsNullOrEmpty(genericLib)) 
     { 
      string path = Environment.GetEnvironmentVariable("Path"); 

      if (path != null && !path.Contains(genericLib)) 
      { 
       path = genericLib + ";" + path; 
       Environment.SetEnvironmentVariable("path", path); 
      } 

      string new_path = Environment.GetEnvironmentVariable("Path"); 
     } 

Отладчик показывает мне, что new_path переменная действительно содержит новый путь, который я добавил. Но в следующий раз, когда я исполню этот код, добавленный путь больше не существует.

Кто-нибудь знает, почему это так?

+2

Это в значительной степени отвечал прямо из описания резюме перегрузок [ 'Environment.SetEnvironmentVariable'] (https://msdn.microsoft.com/en-us/library/system. environment.setenvironmentvariable (v = vs.110) .aspx). – hvd

+0

@hvd: спасибо – walruz

ответ

1

documentation этого метода говорит (курсив мой):

Создает, изменяет или удаляет переменную среды, хранящуюся в текущем процессе.

Таким образом, вы изменяете переменную окружения только для процесса. Используйте this overload вместо:

Environment.SetEnvironmentVariable("path", path, EnvironmentVariableTarget.Machine); 
Смежные вопросы