小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

如何用.NET操作Windows注冊表

 命運之輪 2006-10-16

如何用.NET操作Windows注冊表

 

注冊表是每個Windows系統(tǒng)的重要組成部分。它包含與操作系統(tǒng)配置,硬件和所安裝軟件有關(guān)的大量信息。在.NET出現(xiàn)前,通過編程訪問注冊表要應(yīng)用Windows API(應(yīng)用程序接口)。.NET Framework通過Microsoft.Win32命名空間簡化了這一過程。本文詳細說明如何通過.NET操作注冊表。

注冊表概述

Windows注冊表呈樹狀或?qū)哟谓Y(jié)構(gòu)。Windows提供注冊表編輯器(regedt32.exe/regedit/exe)對其進行編輯。注冊表由包含所有數(shù)據(jù)的鍵構(gòu)成。這些鍵不能被刪除或重命名。下表概括說明了這些鍵:

  • HKEY_CURRENT_USER:保存當前登錄用戶的配置信息。用戶的文件夾、屏幕顏色和控制面板設(shè)置都存儲在這個鍵中(也可稱作用戶基本資料)。它是HKEY_USERS的一個子鍵。
  • HKEY_USERS:這個鍵中包含計算機上所有用戶的基本資料。
  • HKEY_LOCAL_MACHINE:這個鍵包含計算機的配置信息。
  • HKEY_CLASSES_ROOT:這個鍵包含文件關(guān)聯(lián)信息。也就是說,它告訴Windows打開特定類型的文件應(yīng)使用何種程序。它是HKEY_LOCAL_MACHINE\Software的一個子鍵。
  • HKEY_CURRENT_CONFIG:這個鍵包含計算機硬件信息。
  • HKEY_PERFORMANCE_DATA:在安裝軟件時,每個軟件組件為它的對象和計數(shù)器建立鍵,并在執(zhí)行時寫入計數(shù)器數(shù)據(jù)。這種性能數(shù)據(jù)存儲在這個鍵中。

這些鍵能夠以各種方式存儲數(shù)據(jù)。在注冊表中,共有六個數(shù)據(jù)類型可用來存儲數(shù)據(jù)。這些數(shù)據(jù)類型如下表所示:

  • REG_BINARY:以一串十六進制數(shù)對存儲的二進制數(shù)據(jù),每個數(shù)對的值在0-255之間。REG_BINARY的長度不固定。
  • REG_DWORD:它為雙字數(shù)據(jù)類型,由四個字節(jié)(32位)的數(shù)字組成,其值在0-4GB之間。設(shè)備驅(qū)動器和服務(wù)參數(shù)通常為此數(shù)據(jù)類型。
  • REG_EXPAND_SZ:這個可擴充的字符串數(shù)據(jù)類型實際上是一個變量。在使用時,當字符串被系統(tǒng)調(diào)用時,它的值被真正的值代替。
  • REG_MULTI_SZ:多個字符串值,不同的值用空格、逗號和其它符號隔開。
  • REG_SZ:固定長度的文字字符串值。
  • REG_FULL_RESOURCE_DESCRIPTOR:它用于硬件注冊表鍵中。

了解了注冊表的基礎(chǔ)知識,你就能夠利用適當?shù)?NET類來處理注冊表的內(nèi)容。

處理注冊表

Microsoft.Win32命名空間為處理注冊表提供必要的類。命名空間中的兩個主要的類為Registry和RegistryKey。Registry聯(lián)合RegistryKey一起訪問個別的注冊表鍵。它映射到前面列出的主要注冊表鍵。

  • Registry.CurrentUser
  • Registry.Users
  • Registry.LocalMachine
  • Registry.ClassesRoot
  • Registry.CurrentConfig
  • Registry.PerformanceData

RegistryKey類利用前面列表中的一個Registry類項目來訪問單個的注冊表鍵。下面的C# Windows應(yīng)用程序代碼顯示ClassesRoot注冊表鍵中一個特殊條目的信息。

RegistryKeyrootKey = Registry.ClassesRoot;

rootKey = rootKey.OpenSubKey(".doc", true);

MessageBox.Show(rootKey.GetValue("").ToString());

MessageBox.Show(rootKey.GetValue("Content Type").ToString());

foreach(string sub in rootKey.GetSubKeyNames()) {

MessageBox.Show(sub);

RegistryKeytmp = rootKey.OpenSubKey(sub);

MessageBox.Show(tmp.Name);

}

foreach(string test in rootKey.GetValueNames()) {

MessageBox.Show(rootKey.GetValue(test).ToString());

}

代碼參考正確的命名空間以利用注冊表類。

using Microsoft.Win32;

代碼訪問ClassesRoot鍵(.doc)中的特定子鍵。該鍵對系統(tǒng)如何處理帶特定文件擴展名(.doc)的文件進行定義。前兩個消息對話框語句顯示鍵本身的信息。提交到RegistryKey類GetValue方法的空值顯示默認鍵值。第二個消息對話框顯示與鍵有關(guān)的內(nèi)容類型(MIME類型)。

第一個foreach塊顯示注冊表鍵中所有子鍵的名稱。第二個foreach塊顯示與前兩個消息對話框語句一樣的信息,但使用GetValueNames方法獲得同樣的結(jié)果(所以你不必知道項目的名稱)。

對應(yīng)的VB.NET代碼如下:

Dim rootKey As RegistryKey

rootKey = Registry.ClassesRoot

Dim regSubKey As RegistryKey

Dim subk As String, test As String

Dim tmp As RegistryKey

rootKey = rootKey.OpenSubKey(".doc", True)

MessageBox.Show(rootKey.GetValue("").ToString())

MessageBox.Show(rootKey.GetValue("Content Type").ToString())

For Each subk In rootKey.GetSubKeyNames()

MessageBox.Show(subk)tmp = rootKey.OpenSubKey(subk)

MessageBox.Show(tmp.Name)

Next

or Each test In rootKey.GetValueNames()

MessageBox.Show(rootKey.GetValue(test).ToString())

Next

:子鍵名不區(qū)分大小寫。

增加注冊表值

查閱注冊表值不錯,但有時候你需要增加注冊表值。通常,應(yīng)用程序把注冊表當作存儲應(yīng)用程序相關(guān)數(shù)據(jù)的中央倉庫。這種方法可以接受,但為避免系統(tǒng)或應(yīng)用程序出現(xiàn)問題,我們不建議修改Windows系統(tǒng)或其它應(yīng)用程序的值。
 

RegistryKey類中包含CreateSubKey方法,可用它來增加特定注冊表鍵元素的子鍵。另外,SetValue方法允許你增加鍵的項目與值。下面的實例給HKEY_CLASSES_ROOT鍵增加了一個子鍵。給鍵增加空白值設(shè)定了它的默認鍵值。

RegistryKeyrootKey = Registry.ClassesRoot;

RegistryKeyregSubKey;

rootKey = rootKey.OpenSubKey(".doc", true);

regSubKey = rootKey.CreateSubKey ("Newsletter");

regSubKey.SetValue("Site", "www.techrepublic.com");

regSubKey.SetValue("", "Test Link");

對應(yīng)的VB.NET代碼如下:

Dim rootKey As RegistryKey

rootKey = Registry.ClassesRoot

Dim regSubKey As RegistryKey

rootKey = rootKey.OpenSubKey(".doc", True)

regSubKey = rootKey.CreateSubKey("Newsletter")

regSubKey.SetValue("Site", "www.techrepublic.com")

regSubKey.SetValue("", "Test Link")

用DeleteSubKey方法可以方便地刪除鍵,所以我們可以用下面的VB.NET代碼輕松刪除新建的子鍵。

Dim rootKey As RegistryKey

rootKey = Registry.ClassesRoot

rootKey = rootKey.OpenSubKey(".doc", True)

rootKey.DeleteSubKey("Newsletter")

另外,DeleteSubKeyTree方法允許你刪除一個子鍵和遞歸子級子鍵。

警告

注冊表是Windows中最重要的組件。因此,在處理其內(nèi)容時,你應(yīng)該極度小心;因為無意改變系統(tǒng)或應(yīng)用程序鍵可能會造成系統(tǒng)或應(yīng)用程序故障。但是,注冊表可作為一個存儲點,用來存儲你所開發(fā)的應(yīng)用程序的專用數(shù)據(jù)。幸運的是,不管你應(yīng)用哪種語言,用.NET Framework處理注冊表都比較容易。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多