通过SetEnvironmentVariable进行的更改不会在使用getenv的库中生效

我有一个简单的c#应用程序,它使用mingnu编译器工具集绑定到库编译。 我可以轻松地调用库中的函数而不会出现问题。

然而,库调用getenv来设置自己这个环境变量需要设置为库正常工作所以我使用Environment.SetEnvironmentVariable但是库无法检索我设置的值。

getenv在启动时创建进程的环境变量块的副本。 通过SetEnvironmentVariable进行的任何后续更改都不会反映在getenv使用的变量块中。 您需要调整setenv函数以使调整后的getenv调用中反映的值。

请参阅: http : //msdn.microsoft.com/en-us/library/tehxacec(VS.71).aspx

“getenv和_putenv使用全局变量_environ指向的环境副本来访问环境.getenv只对运行时库可访问的数据结构进行操作,而不是对由进程创建的环境”段“进行操作。因此,对main或wmain使用envp参数的程序可能会检索无效信息。“

您可以将_putenv_s函数导入C#类,以便以对本机C ++代码可见的方式设置环境变量。

这使用InteropServices

 using System.Runtime.InteropServices; public class TestEnv { [DllImport( "msvcrt.dll" )] public static extern int _putenv_s( string e, string v ); public TestEnv() { _putenv_s( "ENV_VAR", "VALUE" ); } } 

这里有一个教程可能会有所帮助。