2014-11-05 2 views

ответ

0

No. :(

В этом примере:

namespace ConsoleApplication 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var newDomain = AppDomain.CreateDomain("Alternative"); 

      Proxy proxyObj = (Proxy)newDomain.CreateInstanceAndUnwrap(typeof(Proxy).Assembly.GetName().FullName, 
                     typeof(Proxy).FullName); 

      Environment.SetEnvironmentVariable("HELLO_MSG", "Hello World", EnvironmentVariableTarget.Process); 

      proxyObj.ShowEnvironmentVariable(); 

      Console.ReadKey(); 
     } 
    } 

    class Proxy : MarshalByRefObject 
    { 
     public void ShowEnvironmentVariable() 
     { 
      var msg = Environment.GetEnvironmentVariable("HELLO_MSG"); 
      Console.WriteLine(String.Format("{0} (from '{1}' AppDomain)", msg, AppDomain.CurrentDomain.FriendlyName)); 
     } 
    } 
} 

Выведет:

Hello World (from 'Alternative' AppDomain) 

Процесс является наиболее конкретный уровень инкапсуляции для переменных среды, и AppDomain ы будет по-прежнему «жить внутри» тот же процесс.

Обратите внимание, что это будет (например, Directory.GetCurrentDirectory(), командные аргументы и т. д.

Одно из возможных решений может создать рабочие процессы (приложения .exe, порожденные из основного процесса), но это, безусловно, добавит некоторые сложность вашего приложения.