注册表项和环境变量有什么区别?
我认为环境变量只能在 Windows 操作系统中找到?我听说改变这些很容易,所以信任他们不好吗?注册表项是否同样容易更改?
注册表项是否存储在内核中?
我最重要的问题是:我知道环境变量让我知道 %APPDATA 的路径、当前用户名、程序文件的路径、运行的 Windows 操作系统的版本等。但注册表项也一样包含此类数据 - 我是否也可以通过查看注册表项来找出此类信息?
最佳答案
两者都是用来配置程序的。最大的区别是环境变量保存在内存中,注册表项保存在文件中。这解释了它们的许多特性:
- 一旦写入环境变量值的进程终止,环境变量值就会丢失。
- 一个进程不能更新另一个进程的环境变量值。除了一个重要的异常(exception):进程的环境是由启动它的进程创建的。 CreateProcess() 的 lpEnvironment 参数。这就是父进程配置其启动的子进程的方式。
- 存储环境变量的空间非常有限,最大 64KB。
- 环境变量不像注册表项那样具有用户范围,它们对任何用户都具有相同的值,除非父进程明确处理它。
- 无法保护环境变量值。
- 访问环境变量很快。需要注意的是,搜索变量是一个 O(n) 操作,因为它们没有层次结构,也没有索引。有限的环境大小使它变得不必要。然而,Windows 大量优化了注册表项访问。
关于c++ - 差异 : Environment Variables & Registry Keys,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7213723/