c++ - 差异 : Environment Variables & Registry Keys

标签 c++ winapi registry posix environment-variables

注册表项和环境变量有什么区别?

我认为环境变量只能在 Windows 操作系统中找到?我听说改变这些很容易,所以信任他们不好吗?注册表项是否同样容易更改?

注册表项是否存储在内核中?

我最重要的问题是:我知道环境变量让我知道 %APPDATA 的路径、当前用户名、程序文件的路径、运行的 Windows 操作系统的版本等。但注册表项也一样包含此类数据 - 我是否也可以通过查看注册表项来找出此类信息?

最佳答案

两者都是用来配置程序的。最大的区别是环境变量保存在内存中,注册表项保存在文件中。这解释了它们的许多特性:

  • 一旦写入环境变量值的进程终止,环境变量值就会丢失。
  • 一个进程不能更新另一个进程的环境变量值。除了一个重要的异常(exception):进程的环境是由启动它的进程创建的。 CreateProcess() 的 lpEnvironment 参数。这就是父进程配置其启动的子进程的方式。
  • 存储环境变量的空间非常有限,最大 64KB。
  • 环境变量不像注册表项那样具有用户范围,它们对任何用户都具有相同的值,除非父进程明确处理它。
  • 无法保护环境变量值。
  • 访问环境变量很快。需要注意的是,搜索变量是一个 O(n) 操作,因为它们没有层次结构,也没有索引。有限的环境大小使它变得不必要。然而,Windows 大量优化了注册表项访问。

关于c++ - 差异 : Environment Variables & Registry Keys,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7213723/

相关文章:

c++ - EnumWindows( ) 没有找到一些顶层窗口?

c# - 将设置写入注册表,由 x64 和 x86 应用程序共享(绕过注册表重定向)

Powershell如何查找注册表项属性的属性类型

c++ - C++20 中的 CTAD 和指定初始值设定项

c++ - opengl过剩使hud

c++ - IOS 上的 OpenCV 来自 C++ 的 haar 级联 xml 文件路径问题

c++ - 如何在 C++ 中重载两个不同的 I/O 运算符

go - 如何管理使用 Win32 API(记事本、Word、Outlook、Chrome 等)打开的应用程序窗口

windows - 需要有关如何使用 InstallShield 2010 将我的应用程序文件扩展名与应用程序相关联的信息

c++ - 将整数分配给变体