從零講起 徹底走出注冊表應用的迷霧
從零講起 徹底走出注冊表應用的迷霧
Windows始終有一快菜鳥的禁區,那就是注冊表。Windows將其運行時所需的配置信息存儲在以樹狀格式組織的數據庫(注冊表)中,隻要知道設置對應的注冊表位置,就能對係統中幾乎所有的設置進行修改。但微軟官方對於注冊表的資料實在有限,菜鳥對於注冊表操作就更感覺無從下手了,就像在黑暗中行走。
四盞照明燈帶你走出注冊表誤區
誤區1.普通用戶不應該修改注冊表
微軟對於注冊表的態度一直有些隱瞞,甚至在幫助文件中都寫道:“盡管可以用注冊表編輯器查看和修改注冊表,但通常不比這樣做,因為更改不正確可能會損壞係統。”微軟希望所有的係統設置都能夠在其設計的係統管理工具中進行,而不是修改注冊表,正因為微軟自身都對用戶修改注冊表抱不置可否的態度,所以大多數用戶,始終對注冊表有一種敬畏心理。
照明燈:實際隻要掌握了注冊表的基本知識和“注冊表編輯器”使用方法, 就能進行修改。盡管微軟提供的資料不多,但從Google上搜索相關的關鍵字(如“修改注冊表+去掉快捷方式小箭頭”)就能找到相應的注冊表位置。
誤區2.注冊表=注冊表編輯器
這可能是最讓混淆的概念了,很多人都認為“注冊表”和“注冊表編輯器”是一種東西。
菜鳥A:“什麽是Windows注冊表呢?”
菜鳥B:“這個我知道,不就是regedit.exe嗎?依次點擊“開始-運行”,輸入regedit.exe打開的就是注冊表啦!”
菜鳥A:“哦,原來是這樣。不過用regedt32.exe不是也能改注冊表嗎?難道有2個注冊表?”
照明燈:注冊表是一個保存係統、軟件設置數據的數據庫,而“注冊表編輯器”隻是對於整個係統的讀取/修改工具。這種概念的錯誤就好比你將記錄營業額的Excel表格於打開此表格的Excel軟件都稱作“營業額表格”。在Windows 9X/2000中,regedit.exe和regedt32.exe是兩個程序,其中的regedt32.exe無法進行REG文件的導入,也無法在Dos(16位狀態)下運行;而在Windows XP中,使用regedit.exe和regedt32.exe打開的其實是同一程序,regedt32.exe的功能隻不過是調用regedit.exe。
誤區3.係統的永動機----無限提升係統性能
剛才說道在注冊表中存放了係統的軟硬件設置數據,也就是說,隻要修改得當,能在一定程度提升係統性能,有些朋友剛學會修改注冊表,就以為修改注冊表可以無限的提升係統性能,並且因此頻繁修改注冊表。
照明燈:適當的修改注冊表可以提升係統性能,但這種提升是以硬件為基礎的,隻有當操作係統本身的設置相對硬件係統來說比較保守時,我們才有可能通過修改相關設置來發掘硬件本身潛能,試係統得到優化。但如果硬件本身就不怎麽樣,通過修改注冊表來提升係統性能便隻能成為一種奢望。如果真能這樣大家就不必掏銀子升級舊機器了,隻需改改注冊表就行了。
誤區4.舍近求遠
先來看一個例子:在Windows XP中,默認啟動的“分組相似任務欄按鈕”功能可以使原來日益擁擠的任務欄變的寬敞起來,可是用慣了Windows 98/2000的用戶可能會覺得不習慣,想要禁用這個功能,有些朋友就會自然的想到尋找注冊表中的修改位置,最後好不容易遭到了注冊表中禁用此功能的方法:打開“注冊表編輯器”,找到HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced,將其下的“TaskbarGlomming”鍵值改為0來達到目的。其實係統本身已經提供了相應的設置方法,隻需要右鍵單擊任務欄空白處,並選擇“屬性”,然後在“任務欄屬性”窗口中去除“分組相似任務欄按鈕”的勾選即可。
照明燈:從這個例子就可以看出,其實在注冊表中的絕大多數選項,Windows本身就提供了直觀的修改方法。如果同樣能達到目的的,又何必舍近求遠呢?很多網站提供的技巧中都包含此類“偽技巧”。有一個簡單的識別方法:在網上搜索到了注冊表的修改位置後,打開“注冊表編輯器”檢查這個注冊表位置中對應的選項鍵值是否存在,如果不存在需要新建則多數是真的,而如果已經存在了,則很有可能在係統中已經提供了相應的設置功能
三個疑問讓你認清注冊表的真麵目
1.為什麽一定要使用注冊表
或許你會問,注冊表既複雜,修改不當又容易引發係統故障,而Dos或早期的Windows沒有注冊表卻也能正常工作,那麽現在的Windows一定需要注冊表呢?
DOS是一個純命令操作平台,沒有圖形界麵,一切輸入均通過命令的方式來解決。要打開文本文件1.txt需要輸入“edit 1.txt”命令才行,也就是說“要打開什麽文件”,“用什麽程序打開此文件”這些問題都必須由你來告訴計算機。而現在的Windows係統中,要打開1.txt的屬性隻需在“資源管理器”雙擊此文件即可,你隻要指定要打開的文件,計算機就會根據你要打開的文件類型自動選擇合適的應用程序進行操作,這種智能的打開方法就是由注冊表中保存的“文件關聯”數據(出了“文件關聯”外,注冊表還存放了其他很多重要的設置數據)。這種發展是由計算機的複雜性決定,在DOS時代可能無需這種機製,但如果現在Windows沒有“文件關聯”,那成千上萬種文件類型一定會讓你看眼花。
2.注冊表的“媽媽”是誰
Windows設計之初,並沒有采用注冊表這種方式來存放軟硬件配置信息,而是使用了兩個擴展名為INI的文件(system.ini和win.ini)。對於INI文件大家應該很熟悉了,很多“綠色軟件”都聲稱其不在注冊表中寫入任何數據,但大多會在其安裝目錄下留下一個或幾個INI文件。既然當初使用的是INI,為什麽後來又改成注冊表了呢?這是因為INI文件有一個致命的弱點就是大小不能超過64KB,隨著軟硬件功能的日益進步,其所需的配置數據體積也在不斷膨脹,INI文件早已無法滿足這種數據量的要求了。另外INI其實是依據某種定義規範的文本文件,編輯過程極易出錯並由此導致係統故障,為了克服這些問題,在Windows 95及其後的版本中,Window係統都無一例外的采用了注冊表機製,並將原來由多個INI組成的軟硬件配置信息統一到了一起,形成一個數據庫,那就是注冊表。
3.注冊表的家在哪裏
既然注冊表是一個數據庫,那麽這個數據庫文件在那裏呢?其實,難怪不少剛接觸電腦的朋友誤以為regedit.exe就是注冊表,這是由於對注冊表數據庫的組成不清楚而造成的。Windows 98注冊表的數據文件主要由System.dat和User.dat這兩個文件組成,並保存在C:\Windows目錄下,其中System.dat存儲的是係統和硬件相關的配置,而User.dat則保存軟件配置和用戶配置,Windows 2000/XP注冊表的數據文件主要存儲在%Windir%\System32\config目錄中的Default,Sam,Security,System,software和Userdiff等6個文件中,除此之外,還有部分數據保存在用戶的配置文件目錄中,比如Window 2000/XP中的Administrator的部分注冊表數據就保存在C:\Documents and Settings\Administrator目錄的Ntuser.dat文件中,所以隻需要Administrator登陸係統後其目錄下的NTUSER.DAT就不能被刪除,因為它已經被加載到注冊表中了。
兩個知識點理清錯綜複雜的注冊表脈絡
1.查查注冊表元素的身份證
運行regedit.exe打開“注冊表編輯器”,就能在其左側看到注冊表的分支結構,其中以文件夾方式表示的稱為“鍵”,而在選中一個鍵後在窗口右側顯示的則稱為“項”。在網上搜索到的修改教程中經常會提到“根鍵”,“主鍵”,“子鍵”,“鍵值項”,是什麽意思呢?
①根鍵(Root Key)是指在注冊表編輯器左側以“HKEY”作為名稱前綴的位置,因其位於注冊表最項層被稱為根鍵,如Windows XP的注冊表中包括五大根鍵,分別為HKEY_CLASSES_ROOT,HKEY_CURRENT_USER,HKEY_LOCAL_MacHINE,HKEY_USERS和HKEY_CURRENT_CONFIG。這些根鍵都可所寫的,譬如HKEY_CLASSES_ROOT就可以簡寫為HKCR,其它的則以此類推。
②主鍵(Main Key)是指根鍵下麵於根鍵最近的鍵,主鍵通常包括一個或多個子鍵或鍵值,如圖中HKEY_LOCAL_MACHINE包括5個主鍵。
③子鍵(Sub Key)的位置是相對的,並不固定。某個鍵下麵包含的另一個鍵則稱它為前者的子鍵。但主鍵則不能稱為根鍵的子鍵,這種以相對位置關係來命名的方式不能用於根鍵和主鍵。
④鍵值項(Value entry)是指顯示在“注冊表編輯器”右側的項目,每個鍵值項包括名稱,類型和數據三部分。鍵值項的名稱可以由任意字符,數字,代表符和空格組成,但不能使用反斜杠。不同鍵值,主鍵和子鍵的鍵值項可以同名,但同一鍵中的鍵值項不能同名。鍵值項所定義的內容即為該鍵值項的值(即“鍵值”),其中最多能存放64KB的數據。值的數據類型可以是字符串,二進製值,DWord(雙字節)值等。
小提示:上麵的描述方法較為規範,平時我們還習慣將“子鍵”稱為“分支”,而將“鍵值項”簡稱為“項”,這些稱謂沒有本質區別,隻是叫法習慣不同罷了。
2.真正的根鍵隻有兩個
Windows 98的注冊表有6個鍵值,而Windows 2000/XP/2003係統的根鍵數則是5個,但這些根鍵中隻有HKEY_LOCAL_MACHINE和HKEY_USERS是真正的注冊表鍵,其它幾個鍵值都是從這兩個根鍵的某個分支映射出來的,相對於這兩個根鍵深層分支的一個快捷方式或者別名,主要是為了方便用戶操作。
⑴HKEY_LOCAL_MACHINE
這個根鍵存儲的是安裝在當前計算機上的硬件和軟件配置信息,比如硬件設備的驅動程序,特定軟件設置和Windows係統安裝配置等數據。這些信息對當前係統中的所有用戶均保持一致。這個根鍵下麵還有5個重要的主鍵,其中Software和System最為關鍵,平時對係統進行相關調整大多集中在這兩個鍵上。
①Software子鍵:保存於這台電腦中安裝的應用程序和相關的設置,許多應用程序都使用該鍵值保存特定設置。關於Windows的許多設置都存在於HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion中。
②System子鍵:在這裏精確的確定了Windows所裝載的設備驅動程序和服務,以及當Windows啟動時所使用的各種參數(如在網絡上的計算機名稱和當前硬件配置恩見)。
⑵HKEY_USERS
HKEY_USERS包含有電腦特定用戶的配置數據,Windows在此根鍵下的一個子鍵中為登陸該電腦的每個用戶存儲配置數據。如果電腦隻有一個用戶使用,那麽所看到的就是單獨一個子鍵,稱為“.DEFAULT”
而HKEY_USERS\S-1-5-21-1078081533-1202660629-1343024091-500(不同的電腦不一樣)則是當前登陸用戶的配置數據,其中S-1-5-21-1078081533-1202660629-1343024091-500就是這個目前登陸用戶的SID,每一個網絡上的用戶都被域用戶管理器分配了一個SID,每個SID是唯一的,所以它依賴於登陸用戶,其分支數據是從用戶配置文件的Ntuser.dat文件調出的。
3.改頭換麵我也認識你
前文提到隻有HKEY_LOCAL_MacHINE和HKEY_USERS是才真正的注冊表鍵。也就是說如果更改了其它別名分支中的某個鍵或鍵值,那麽在HKEY_LOCAL_MACHINE和HKEY_USERS也會做出相應更改,通常我們還可將它們稱為“別名”,下麵是這些別名的實際位置:
①HKEY_CLASSES_ROOT--HKEY_LOCAL_MACHINE\SOFTWARE\Classes的別名。包含有文件類型和程序之間的關聯。
②HKEY_CURRENT_USER--HKEY_USERS一個分支別名,該分支包含有當前登陸用戶的配置數據,如果是單一用戶HKEY_CURRENT_USER則指向HKEY_USERS\.DEFAULT
③HKEY_CURRENT_CONFIG
--HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Hardware Profiles\Current的別名,其中ControlSet001還有可能是ControlSet000,ControlSet002等,它包含當前的硬件配置。
附表1 HKEY_USERS部分重要分支說明
.DEFAULT\AppEvents ------- 列出了事件相應,描述和各種係統功能的聲音
.DEFAULT\Console ------- 保存了MS-Dos窗口的選項,布局,熒屏顏色和字體設置
.DEFAULT\Control Panle ------- 所有在控製麵板裏配置設置的信息全保存在這個鍵和它的子鍵中
.DEFAULT\Environment ------- 保存了環境變量設置,特定的臨時文件位置
.DEFAULT\Keyboard Layout ------ 保存的是鍵盤布局設置,其中默認設置是美國傳統鍵盤布局
.DEFAULT\Software ------保存軟件的安裝設置,缺省用戶隻有微軟生產的軟件的設置
SID\Network ------ 所有連接到其他係統的映射配置
SID\Printers ------ 所有安裝,共享和連接的打印機配置
SID\Sofeware ------單獨的用戶擴展,基於為用戶或者被用戶安裝的其他軟件。
附表2
HKEY_CLASSES_ROOT
配置單元包含的子項,列出了當前已計算機上注冊的所有COM服務器和與應用程序相關的所有文件擴展名。
HKEY_CURRENT_USER
保存著當前登陸到由這個注冊表服務的計算機機上的用戶配置文件,其中子項包含環境變量,個人程序組,桌麵設置,網絡連接,打印機和應用程序首選項
HKEY_LOCAL_MACHINE
保存操作習用及硬件相關信息的配置單元,是一個公共配置信息,與具體用戶無關
HKEY_USERS
包含的子項,含有當前計算機上所有的用戶配置文件
HKEY_CURRENT_CONFIG
包含的子項,列出了計算機當前會話的所有硬件配置信息
HKEY_DYN_DATE
包含係統硬件的當前狀態,也包含了那些需要更新和檢索的數據,此鍵隻存在於Windows 98/ME 係統中。