使用 Visual Basic .NET 訪問註冊表

來源:互聯網
上載者:User
visual|訪問|註冊表

在 Visual Basic .NET 中編程時,可以選擇通過 Visual Basic .NET 提供的函數或者 .NET 架構的註冊表類來訪問註冊表。雖然多數情況下使用 Visual Basic 函數已經足夠,但有時仍需要使用 .NET 架構。

註冊表儲存了有關作業系統的資訊以及電腦上安裝的應用程式的資訊。使用註冊表可能會影響安全性。因此,必須仔細檢查訪問註冊表的代碼以確保不會給將運行該代碼的電腦帶來安全影響。

登錄機碼包括兩部分:值名稱和值。項目儲存在項和子項系統中,如同檔案系統中檔案儲存體在目錄和子目錄中一樣。

前提條件

要掌握本文內容,必須具備以下前提條件: 熟悉以前版本的 Visual Basic。 掌握有關註冊表的設計和用途的知識。 理解訪問註冊表的安全問題。

Visual Basic .NET 提供了四個函數以訪問註冊表。要使用這些函數,必須具有RegistryPermissionAccess許可權。以完全信任身份啟動並執行任何代碼(根據預設的安全原則,這是指安裝在使用者本地硬碟上的任何代碼)都具有訪問註冊表的許可權。

Visual Basic .NET 函數 說明
DeleteSetting 從註冊表中應用程式的項目中刪除一段或一個項設定。
GetSetting 從註冊表中應用程式的項目中返回一個項設定值。
GetAllSettings 從註冊表中應用程式的項目中返回項設定及其值的列表。
SaveSetting 在註冊表中建立或儲存一個應用程式項目。


注意:不能通過GetSetting函數返回段的名稱。

如果不能儲存項設定,將產生一個ArgumentException對象。

下面的樣本建立了一個登錄機碼和兩個子項。接著顯示第一個項的值,並顯示第一個項及其子項的值。然後刪除第二個子項,並顯示第一個項及其子項的值,以確認刪除了第二個子項。

' 建立第一個項。

SaveSetting("TestApp","Startup","FirstKey","First")

' 建立第一個子項。

SaveSetting("TestApp","FirstKey","FirstSubKey","FirstSub")

' 建立第二個子項。

SaveSetting("TestApp","FirstKey","SecondSubKey","SecondSub")

Try

' 寫出第一個項的值。

Console.WriteLine ((GetSetting("TestApp","Startup","FirstKey"))

' 寫出第一個項及其兩個子項。

Console.WriteLine (GetAllSettings("TestApp","Startup"))

Catch e As ArgumentException

Catch e As Exception

Console.WriteLine (e.GetType.ToString)

Finally

End Try

DeleteSetting("TestApp","FirstKey","SecondSubKey")

Try

Console.WriteLine (GetSetting("TestApp","Startup","FirstKey"))

Console.WriteLine (GetAllSettings("TestApp","Startup"))

Catch e As ArgumentException

Catch e As Exception

Console.WriteLine (e.GetType.ToString)

Finally

End Try下的登錄機碼。為此,必須登入到系統,因為HKEY_CURRENT_USER登錄機碼僅在登入到系統時才被啟用。

從一個非互動進程(如 mtx.exe)訪問的註冊表設定應儲存在HKEY_LOCAL_MACHINE\Software\登錄機碼下。

使用 .NET 架構訪問註冊表下的項,因而具有一定的局限性。為此,可以使用 .NET 架構 Microsoft.Win32 名稱空間中的Registry類。

Registry類提供基本的登錄機碼,用於訪問子項及其值。基項本身是唯讀。下表列出並說明了Registry類中提供的七個項。

說明
ClassesRoot 定義文檔的類型以及與這些類型相關的特性。
CurrentConfig 包含與使用者無關的硬體設定資訊。
CurrentUser 包含有關目前使用者的喜好設定(如環境變數)的資訊。
DynData 包含動態註冊表資料,例如虛擬設備驅動程式使用的註冊表資料。
LocalMachine 包含五個子項(Hardware、SAM、Security、Software 和 System),儲存本機電腦的配置資料。
PerformanceData 包含軟體組件的效能資訊。
Users 包含有關預設使用者喜好設定的資訊。

下面的樣本顯示了如何從 HKEY_CURRENT_USER 中讀取一個 DWORD 值:

Imports Microsoft.Win32

Dim regVersion As RegistryKey

Dim keyValue As String

keyValue = Software\\Microsoft\\TestApp\\1.0

regVersion = Registry.CurrentUser.OpenSubKey(keyValue, False)

Dim intVersion As Integer = 0

If (Not regVersion Is Nothing) Then

intVersion = regVersion.GetValue("Version", 0)

regVersion.Close()

End If



下面的樣本將讀取,遞增,然後向 HKEY_CURRENT_USER 中寫入一個 DWORD 值:

Imports Microsoft.Win32

Dim regVersion As RegistryKey

regVersion =

Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\TestApp\\1.0", True)

If regVersion Is Nothing Then

' 不存在該項,建立該項。

regVersion =

Registry.CurrentUser.CreateSubKey("SOFTWARE\\Microsoft\\TestApp\\1.0")

End If

Dim intVersion As Integer = 0

If (Not regVersion Is Nothing) Then

intVersion = regVersion.GetValue("Version", 0)

intVersion = intVersion + 1

regVersion.SetValue("Version", intVersion)

regVersion.Close()

End If



許可權

System.Security.Permission名稱空間中的RegistryPermission類控制了訪問註冊表變數的能力。註冊表變數不應儲存在不具備RegistryPermission的代碼可以訪問的記憶體位置。同樣,在授予許可權時,應只授予完成工作所需的最小許可權。

註冊表存取權限值由RegistryPermissionAccess枚舉定義。下表詳細說明了其中的各項。

說明
AllAccess 對註冊表變數的建立,讀取和寫入訪問。
Create 對註冊表變數的建立訪問。
NoAccess 不能訪問註冊表變數。
Read 對註冊表變數的讀取存取。
Write 對註冊表變數的寫入訪問。


注意:如果需要某種許可權組合,例如允許讀取和寫入訪問而拒絕建立訪問,則可以使用一個Or操作來實現,如下所示:

RegistryPermissionAccess.Write Or RegistryPermissionAccess.Read _ "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\TestApp"


使用登錄編輯程式訪問註冊表

當使用部署項目時,還可以選擇使用登錄編輯程式來指定要添加到目標電腦的註冊表中的登錄機碼和項值。

訪問登錄編輯程式開啟一個部署項目。 在View(查看)菜單中,指向Editor(編輯器),然後單擊Registry(註冊表)。

註冊表是儲存有關應用程式以及各個使用者佈建的資訊的最佳位置。此外,也可以從中查看有關係統硬體或要與之互動的應用程式的資訊。

對於大多數項目,通過 Visual Basic 運行時函數訪問註冊表已經足夠。但在某些情況下,也可能需要使用 .NET 架構的Registry類。這兩種操作都很簡單,但由於這種訪問涉及安全問題,所以要注意避免產生安全隱患,例如在項中包含一個純文字密碼或其他敏感資訊等。

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。