Переменные окружения для dll отличаются от exe - PullRequest
4 голосов
/ 01 марта 2011

Я отлаживаю 64-битное приложение, в котором c # exe использует нативный c ++ dll в Windows 7. Кажется, переменные окружения для этих двух различны, хотя они оба выполняются в одном и том же процессе. Как это возможно, что вызов System.Environment.SetEnvironmentVariable не влияет на значения, возвращаемые getenv ()?

Ответы [ 2 ]

6 голосов
/ 01 марта 2011

Переменные среды - это просто блок данных, которые передаются окнами процессу при его запуске.Используемые вами функции времени выполнения (BCL для System.Environment и CRT для getenv), вероятно, делают копии среды во время запуска, что означает, что они не работают с теми же переменными «среды».

Концептуальноони должны сделать это, потому что в противном случае должен был бы быть какой-то способ синхронизации их доступа к среде.

0 голосов
/ 01 марта 2011

Вы можете попробовать использовать следующую функцию.Вам необходимо передать EnvironmentVariableTarget как http://msdn.microsoft.com/en-us/library/system.environmentvariabletarget.aspx, исходя из ваших требований.

public SetEnvironmentVariable (строковая переменная, строковое значение, target EnvironmentVariableTarget)

...