環境變量與注冊表


環境變量的概念(來自百度百科) 
  環境變量(environment variables)一般是指在操作系統中用來指定操作系統運行環境的一些參數,如:臨時文件夾位置和系統文件夾位置等。
環境變量是在操作系統中一個具有特定名字的對象,它包含了一個或者多個應用程序所將使用到的信息。例如Windows和DOS操作系統中的path環境變量,當要求系統運行一個程序而沒有告訴它程序所在的完整路徑時,系統除了在當前目錄下面尋找此程序外,還應到path中指定的路徑去找。用戶可以通過設置環境變量,來更好的運行進程。
 
環境變量的作用(來自百度百科)
環境變量相當於給系統或用戶應用程序設置的一些參數,具體起什么作用這當然和具體的環境變量相關。
比如path,是告訴系統,當要求系統運行一個程序而沒有告訴它程序所在的完整路徑時,系統除了在當前目錄下面尋找此程序外,還應到哪些目錄下去尋找
 
個人理解
理解一:
  操作系統本質上也是程序,只不過它是直接運行在硬件上的(個人理解,在底層層面上計算機更像是機械),它叫系統程序,平常程序編寫的程序叫做應用程序,應用程序運行在操作系統之上。我們知道,其實最早的時候,是沒有操作系統的,技術人員直接在硬件上編寫程序,與硬件緊密耦合在一起,一個程序可能只能在一個單片機上運行。(這個內容很多的,暫時不談我們回歸主題繼續……。)既然操作系統也是是程序,就肯定需要變量(數據值),程序都需要變量(變量可以存儲一些數據供程序使用),程序運行中需要一些數據,必須從變量中讀取。環境變量,應該可以理解為給操作系統軟件和運行在操作系統上的應用軟件提供一些數據。給操作系統提供的變量,需要存儲在一個相對穩定的位置,不依賴操作系統的某段程序,這就需要一個給操作系統用的系統數據庫或者系統配置文件。
應用程序和操作系統程序運行時,可以將整個計算機看成是軟件的運行環境,那么這些變量就可以理解為環境變量了吧。
 
理解二:
  也許可以把環境變量理解成,操作系統的配置數據什么的。但是環境變量其實需要的層次控制非常多,而且擁有各種分類,各種隸屬關系,以利於操作系統的權限層次控制等等。從注冊表就可以看出,環境變量包含在注冊表之下,注冊表是個什么東西,既然稱之為表,那么是不是類似於數據庫的一個表呢?只是這個表存的數據是供操作系統使用的,這個數據庫我們也不知道在哪里。
  環境變量有用戶變量和系統變量,一部分變量給登錄的用戶使用,一些則是供操作系統使用的。這個仔細看下注冊表的名稱就可以看出來。

上面是打開注冊表編輯器后看到的第一個界面。

classes_Root我們知道Root一般用來指系統的根目錄,頂級權限,系統初始點等等。

其他的:current_User、Local_Machine、Users、Current_Config這些從名字上,大概可以猜測理解是什么東西了。

下面再來看下注冊表的概念

  注冊表(Registry,繁體中文版 Windows操作系統稱之為登錄檔)是Microsoft Windows中的一個重要的數據庫,用於存儲系統和應用程序的設置信息。早在 Windows 3.0推出 OLE技術的時候,注冊表就已經出現。隨后推出的 Windows NT是第一個從系統級別廣泛使用注冊表的操作系統。但是,從 Microsoft  Windows 95操作系統開始,注冊表才真正成為Windows 用戶經常接觸的內容,並在其后的操作系統中繼續沿用至今。
  百度百科中會告訴我們打開注冊表的方式:regedit或regedit.exe、regedt32或regedt32.exe
在注冊表編輯器中點擊幫助,可以看到以下信息
//--------------------------------------------------------------------

將系統配置信息集中存儲在調用注冊表的分層數據庫中。可以使用注冊表編輯器,添加並編輯注冊表項和注冊表值,從備份中還原注冊表或將注冊表還原為默認值,以及為引用或備份導入或導出項。

還可以打印注冊表,以及控制具有編輯注冊表權限的帳戶。

有關注冊表的詳細信息(其中包括注冊表概念以及注冊表安全性),請轉至 Windows Server TechCenter (http://go.microsoft.com/fwlink/?LinkID=53495)。

//------------------------------------------------------------------------------------------

  網上有網友提出一個現象,用程序動態的修改注冊表,然后cmd中運行程序卻不能正確執行,但是先修改環境變量,然后就會發現注冊表中是有數據的。這是怎么回事呢?

  再聯系上文,注冊表編輯器里面的一句話:“將系統配置信息集中存儲在調用注冊表的分層數據庫中。”這句話是有問題的,一點都不通順,讀起來讓人

疑惑到第注冊表和數據庫什么關系,我認為這里是翻譯的問題,但是不好糾正,還需要再猜測研究。

  但是至少我們知道,注冊表和一個數據庫有點關系,同時這是對系統配置信息的管理。我們主要關注,注冊表編輯器是對系統配置信息的集中管理,那么上面我們對環境變量的理解就不會錯了。確實是系統的配置信息。

     以上我們已經大概感覺出環境變量是個什么東西,但是注冊表還很模糊,繼續看:

  注冊表是windows操作系統中的一個核心數據庫,其中存放着各種參數,直接控制着windows的啟動、硬件驅動程序裝載以及一些windows應用程序的運行,從而在整個系統中起着核心作用。這些作用包括了軟、硬件的相關配置和狀態信息,比如注冊表中保存有應用程序和資源管理器外殼的初始條件、首選項和卸載數據等,聯網計算機的整個系統的設置和各種許可,文件擴展名與應用程序的關聯,硬件部件的描述、狀態和屬性,性能記錄和其他底層的系統狀態信息,以及其他數據等。

  具體來說,在啟動Windows時,Registry會對照已有硬件配置數據,檢測新的硬件信息;系統內核從Registry中選取信息,包括要裝入什么設備驅動程序,以及依什么次序裝入,內核傳送回它自身的信息,例如版權號等;同時設備驅動程序也向Registry傳送數據,並從Registry接收裝入和配置參數,一個好的設備驅動程序會告訴Registry它在使用什么系統資源,例如硬件中斷或DMA通道等,另外,設備驅動程序還要報告所發現的配置數據;為應用程序或硬件的運行提供增加新的配置數據的服務。配合ini文件兼容16位Windows應用程序,當安裝—個基於Windows 3.x的應用程序時,應用程序的安裝程序Setup像在windows中—樣創建它自己的INI文件或在win.ini和system.ini文件中創建入口;同時windows還提供了大量其他接口,允許用戶修改系統配置數據,例如控制面板、設置程序等。
  如果注冊表受到了破壞,輕則使windows的啟動過程出現異常,重則可能會導致整個windows系統的完全癱瘓。因此正確地認識、使用,特別是及時備份以及有問題恢復注冊表對windows用戶來說就顯得非常重要。
 
注冊表的數據類型:
注冊表的數據類型主要有以下四種:顯示類型(在編輯器中)數據類型說明
REG_SZ:字符串:文本字符串
REG_MULTI_SZ:多字符串值:含有多個文本值的字符串
REG_BINARY:二進制數:二進制值,以十六進制顯示,
REG_DWORD:雙字值;一個32位的二進制值,顯示為8位的十六進制值

 

以上內容整理自網絡,還有個人的理解和心得。

 

 =======================

201810151903更新

通過注冊表,環境變量存儲一些信息,這是具體到windows操作系統配置一些信息的方案。

 linux系統有自己的實現方式,linux系統配置直接叫系統配置文件。

 

 =====================

20190123更新

在windows系統中,點擊開始,運行,輸入:regedit,會打開注冊表編輯器。點擊幫助會看到以下簡介:

將系統配置信息集中存儲在調用注冊表的分層數據庫中。可以使用注冊表編輯器添加並編輯注冊表項和注冊表值,從備份中還原注冊表或將注冊表還原為默認值,以及為引用或備份導入或導出項。還可以打印注冊表,以及控制具有編輯注冊表權限的帳戶。

 

地址:https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc782053(v=ws.10)

 Microsoft®WindowsServer 2003家族注冊表是一個數據庫,其中包含Windows Server 2003家族操作系統的系統配置信息。

 

可搜索:注冊表概念  Registry concepts

地址:https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc780070%28v%3dws.10%29

 

Registry overview  注冊表概述

在Microsoft®Windows Server 2003系列中,系統配置信息集中存儲在稱為注冊表的分層數據庫中。注冊表將替換Windows中用於MS-DOS®和Microsoft LAN Manager的許多.ini、.sys和.com配置文件。

有關管理注冊表的詳細信息,請參閱Microsoft Windows資源工具包網站上的“Windows Server 2003家庭注冊表參考”。有關Windows Server 2003支持的信息,請參閱支持資源。

 

Registry structure  注冊表結構

注冊表以子樹及其鍵、子鍵和條目的層次結構組織。根據每台計算機上安裝的設備、服務和程序,一台計算機的注冊表內容可能與另一台計算機的注冊表內容有很大差異。

鍵可以有子鍵,子鍵可以有子鍵。雖然注冊表中的大多數信息都存儲在磁盤上並且被視為永久性信息,但每次操作系統啟動時都會覆蓋存儲在易失密鑰中的某些信息。

 

Registry subtrees  注冊表子樹

Windows Server_2003系列操作系統有兩個注冊表子樹:HKEYU localU machine和HKEYU users。但是,為了使注冊表中的信息更容易找到,注冊表編輯器實用程序顯示五個子樹,其中三個子樹是注冊表其他部分的別名。下表列出並描述了這五個子樹。

HKEY_LOCAL_MACHINE  

包含有關本地計算機系統的信息,包括硬件和操作系統數據,如總線類型,系統內存,設備驅動程序和啟動控制數據。

HKEY_CLASSES_ROOT 

包含各種OLE技術和文件類關聯數據使用的信息。如果相應的鍵或值存在於hkey_local_machine\software\classes或hkey_current_user\software\classes中,則在hkey_classes\u root中存在特定的鍵或值。如果在這兩個地方都存在一個鍵或值,那么HKEY_CURRENT_USER當前用戶版本就是出現在HKEY_CLASSES_ROOT中的版本。

HKEY_CURRENT_USER 

包含當前以交互方式登錄(而不是遠程登錄)的用戶的用戶配置文件,包括環境變量、桌面設置、網絡連接、打印機和程序首選項。此子樹是hkey_用戶子樹的別名,並指向當前用戶的hkey_用戶\安全ID。

HKEY_USERS 

包含有關活動加載的用戶配置文件和默認配置文件的信息。這包括同時出現在hkey_當前用戶中的信息。遠程訪問服務器的用戶在服務器上沒有此項下的配置文件;他們的配置文件加載到自己計算機的注冊表中。

HKEY_CURRENT_CONFIG 

包含有關本地計算機系統啟動時使用的硬件配置文件的信息。此信息用於配置要加載的設備驅動程序和要使用的顯示分辨率等設置。此子樹是hkey_local_machine子樹的一部分,並指向hkey_local_machine\system\currentcontrolset\hardware profiles\current。

 

每個根密鑰名稱都以HKEY_開頭,以向軟件開發人員表明這是程序可以使用的句柄。句柄是用於標識資源的值,以便程序可以訪問它。

 

想閱讀更多信息,可以到上文指出的鏈接地址閱讀。由於內容是用自動翻譯軟件翻譯,不通順不好理解請閱讀原文。

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM