2011-08-27 117 views
1

註冊表項&環境變量有什麼區別?區別:環境變量和註冊表項

我認爲環境變量只能在Windows操作系統中找到?我聽說這很容易改變這些,所以不太相信他們?註冊表鍵是否易於更改?

是否將註冊表項存儲在內核中?

我最重要的問題是:我知道環境變量讓我知道%APPDATA的路徑,當前用戶名,程序文件的路徑,運行的Windows操作系統的版本等。但是註冊表項也包含這種數據 - 我也可以通過查看註冊表項來找到這些信息嗎?

+1

不特你的主要問題,但:恰恰相反,環境變量在許多現有的操作系​​統中(肯定在每一個POSIX兼容的操作系統)相當普遍的概念,而註冊表是Windows專用。 – rkhayrov

回答

2

另一個重要區別:

環境變量在啓動時加載到進程中。因此,如果在流程運行後更改它們,流程將無法看到。

而關於你的另一個問題:

用戶變量:HKEY_CURRENT_USER \環境

系統變量:HKEY_LOCAL_MACHINE \系統\ CurrentControlSet \控制\會話管理\環境

有關的文章默認系統變量:

http://vlaurie.com/computers2/Articles/environment.htm

2

註冊表項&和環境 變量有什麼區別?

註冊表項永久存儲在特殊文件中。環境變量存儲在進程的內存中,但其中一些(系統環境變量)從進程啓動時的註冊表加載。

3

兩者都用於配置程序。最大的區別是環境變量存儲在內存中,註冊表項存儲在一個文件中。這解釋了它們的許多屬性:

  • 環境變量值一旦寫入進程終止,就會丟失。
  • 進程無法更新其他進程的環境變量值。有一個重要的例外:流程的環境是由啓動它的流程創建的。 CreateProcess()的lpEnvironment參數。這是父進程如何配置它啓動的子進程。
  • 存儲環境變量的空間受到嚴格限制,最大爲64KB。
  • 環境變量沒有像註冊表鍵那樣的用戶範圍,它們對於任何用戶都具有相同的值,除非父進程明確地處理它。
  • 無法保護環境變量值。
  • 訪問環境變量很快。有一點需要注意的是,搜索一個變量是一個O(n)操作,因爲它們沒有分層組織,也沒有索引。有限的環境大小使得不必要的。但是,Windows大量優化了註冊表項訪問權限。