使用 Visual Basic NET 函數訪問注冊表
Visual Basic
NET 提供了四個函數以訪問注冊表
要使用這些函數
必須具有 RegistryPermissionAccess 枚舉的 Read 和 Write 權限
以完全信任身份運行的任何代碼(根據默認的安全原則
這是指安裝在用戶本地硬盤驅動器上的任何代碼)都具有訪問注冊表的權限
有關詳細信息
請參閱 RegistryPermission Class
注意
不能通過 GetSetting 函數返回段的名稱
如果不能保存項設置
將產生一個 ArgumentException 對象
有關此異常的詳細信息
請參閱 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\Software\VB and VBA Program Settings 下的注冊表項
為此
必須登錄到系統
因為 HKEY_CURRENT_USER 注冊表項僅在登錄到系統時才被激活
從一個非交互進程(如 mtx
exe)訪問的注冊表設置應存儲在 HKEY_LOCAL_MACHINE\Software\ 或 HKEY_USER\DEFAULT\Software 注冊表項下
使用 NET 框架訪問注冊表 由於使用 GetSetting 和 SaveSetting 函數只能訪問位於 HKEY_CURRENT_USER\Software\VB and VBA Program Settings 下的項
因而具有一定的局限性
為此
可以使用
NET 框架 Microsoft
Win
名稱空間中的 Registry 和 RegistryKey 類
有關詳細信息
請參閱 Registry 和 RegistryKey
Registry 類提供基本的注冊表項
用於訪問子項及其值
基項本身是只讀的
下表列出並說明了 Registry 類中提供的七個項
下面的示例顯示了如何從 HKEY_CURRENT_USER 中讀取一個 DWORD 值
Imports Microsoft
Win
Dim regVersion As RegistryKey
Dim keyValue As String
keyValue = Software\\Microsoft\\TestApp\\
regVersion = Registry
CurrentUser
OpenSubKey(keyValue
False)
Dim intVersion As Integer =
If (Not regVersion Is Nothing) Then
intVersion = regVersion
GetValue(
Version
)
regVersion
Close()
End If
下面的示例將讀取
遞增
然後向 HKEY_CURRENT_USER 中寫入一個 DWORD 值
Imports Microsoft
Win
Dim regVersion As RegistryKey
regVersion =
Registry
CurrentUser
OpenSubKey(
SOFTWARE\\Microsoft\\TestApp\\
True)
If regVersion Is Nothing Then
不存在該項
創建該項
regVersion =
Registry
CurrentUser
CreateSubKey(
SOFTWARE\\Microsoft\\TestApp\\
)
End If
Dim intVersion As Integer =
If (Not regVersion Is Nothing) Then
intVersion = regVersion
GetValue(
Version
)
intVersion = intVersion +
regVersion
SetValue(
Version
intVersion)
regVersion
Close()
End If
權限 System
Security
Permission 名稱空間中的 RegistryPermission 類控制了訪問注冊表變量的能力
注冊表變量不應存儲在不具備 RegistryPermission 的代碼可以訪問的內存位置
同樣
在授予權限時
應只授予完成工作所需的最小權限
有關詳細信息
請參閱 RegistryPermission 和 System
Security
Permissions
注冊表訪問權限值由 RegistryPermissionAccess 枚舉定義
有關詳細信息
請參閱RegistryPermissionAccess
下表詳細說明了其中的各項
注意
如果需要某種權限組合
例如允許讀取和寫入訪問而拒絕創建訪問
則可以使用一個 Or 操作來實現
如下所示
RegistryPermissionAccess
Write Or RegistryPermissionAccess
Read _
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\TestApp
使用注冊表編輯器訪問注冊表
當使用部署項目時
還可以選擇使用注冊表編輯器來指定要添加到目標計算機的注冊表中的注冊表項和項值
有關詳細信息
請參閱 Registry Editor
訪問注冊表編輯器
打開一個部署項目
在 View(查看)菜單中
指向 Editor(編輯器)
然後單擊 Registry(注冊表)
有關在部署項目中使用注冊表編輯器的詳細信息
請參閱 Registry Settings Management in Deployment
總結
注冊表是存儲有關應用程序以及各個用戶設置的信息的最佳位置
此外
也可以從中查看有關系統硬件或要與之交互的應用程序的信息
對於大多數項目
通過 Visual Basic 運行時函數訪問注冊表已經足夠
但在某些情況下
也可能需要使用
NET 框架的 Registry 類和 RegistryKey 類
這兩種操作都很簡單
但由於這種訪問涉及安全問題
所以要注意避免產生安全隱患
例如在項中包含一個純文本密碼或其他敏感信息等
From:http://tw.wingwit.com/Article/program/net/201311/13928.html