gpt4 book ai didi

c++ - 从 C++ 更新系统环境变量

转载 作者:可可西里 更新时间:2023-11-01 09:18:30 26 4
gpt4 key购买 nike

我目前正在编写一个使用系统环境变量的非托管 C++ 程序。我正在使用 GetEnvironmentVariable(...) 获取值。现在我有一个 C# 程序可以随时更改此变量,例如像这样:

Environment.SetEnvironmentVariable("CalledPath", System.Windows.Forms.Application.ExecutablePath, EnvironmentVariableTarget.Machine);

问题是 C++ 程序不会自动更新此变量(或其一般的环境 block ),因此我仍在使用旧值,除非我重新启动程序,这不是很好。有没有办法更新环境 block 或者最好是另一种读取系统环境变量的方法?

提前致谢,俄语

最佳答案

长话短说,环境变量不能可靠地作为进程间通信的一种形式——您确实需要切换到其他方式。

为了工作,两个程序都需要访问一些公共(public)的环境变量 block ——但实际上,每个进程都有自己的一组环境变量的独立拷贝。更糟糕的是,大多数典型的(C 和 C++)标准库甚至不允许您直接使用 that -- 相反,它们为您制作了 另一个 环境变量的拷贝一起工作。当/如果您调用 getenv()_putenv() 时,只涉及程序的环境变量 block 的内部拷贝。这意味着即使您可以更改进程的环境变量,在该进程中运行的程序仍然不会获得新数据。

所以,您确实需要重新考虑您正在做的事情。从一个程序向另一个程序发送数据有很多的可能性,包括 Windows 消息(例如 WM_COPYDATA)、匿名或命名管道、邮槽、共享内存区域、套接字等。列表很长,但仍然不包括环境变量。

关于c++ - 从 C++ 更新系统环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2273865/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com