dll 的环境变量与 exe 的环境变量不同
我正在调试一个 64 位应用程序,其中 c# exe 使用本机 c++ dll,在 Windows 7 上。这两个应用程序的环境变量似乎不同,即使它们都在同一进程中执行。调用 System.Environment.SetEnvironmentVariable 怎么可能对 getenv() 返回的值没有影响?
I'm debugging an 64-bit application where c# exe is using native c++ dll, on Windows 7. It seems environment variables are different for these two, even though they are both executing in the same process. How is it possible that calling System.Environment.SetEnvironmentVariable has no effect on values returned by getenv()?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
环境变量只是一个数据块,在进程启动时由窗口传递给进程。您正在使用的运行时函数(用于 System.Environment 的 BCL 和用于 getenv 的 CRT)可能会在启动期间复制环境,这意味着它们不在相同的“环境”变量上运行。
从概念上讲,他们必须这样做,因为否则需要某种方法来同步他们访问环境。
The environment variables are just a blob of data which gets passed by windows to the process when it starts. The runtime functions you are using (The BCL for System.Environment and the CRT for getenv) are probably making copies of the environment during startup, which means they are not operating on the same "environment" variables.
Conceptually they must do this because otherwise there would need to be some way to synchronize them accessing the environment.
您可以尝试使用以下功能。您需要将 EnvironmentVariableTarget 作为 http://msdn.microsoft.com/ 传递en-us/library/system.environmentvariabletarget.aspx 根据您的要求。
公共设置环境变量(
字符串变量,
字符串值,
环境变量目标目标
)
You can try using the below function. You need to pass the EnvironmentVariableTarget as http://msdn.microsoft.com/en-us/library/system.environmentvariabletarget.aspx basing on your requirement.
public SetEnvironmentVariable(
string variable,
string value,
EnvironmentVariableTarget target
)