使用 Microsoft.Win32 命名空间读取和写入注册表

更新:2007 年 11 月

虽然在对注册表进行编程时,My.Computer.Registry 应该可以满足您的基本需求,但您也可以使用 .NET Framework 的 Microsoft.Win32 命名空间中的 RegistryRegistryKey 类。

Registry 类中的项

Registry 类提供了可用于访问子项及其值的基本注册表项。这些基本项自身是只读的。下表列出并描述了 Registry 类公开的七个注册表项。

说明

ClassesRoot

定义文档类型以及与那些类型相关联的属性。

CurrentConfig

包含不特定于用户的硬件配置信息。

CurrentUser

包含有关当前用户首选项(例如,环境变量)的信息。

DynData

包含动态注册表数据,例如,虚拟设备驱动程序使用的数据。

LocalMachine

包含五个子项(Hardware、SAM、Security、Software 和 System),其中存储了本地计算机的配置数据。

PerformanceData

包含软件组件的性能信息。

Users

包含有关默认用户首选项的信息。

安全说明:

与将数据写入本地计算机 (LocalMachine) 相比,将数据写入当前用户 (CurrentUser) 更安全。如果您要创建的项此前已由另一个(可能是恶意的)进程创建,这时就会出现一种通常称为“强占”的情况。若要避免出现这种情况,请使用一个在项已经不存在时返回 Nothing 的方法,如 GetValue

从注册表中读取值

以下代码显示如何从 HKEY_CURRENT_USER 中读取字符串。

Dim regVersion As Microsoft.Win32.RegistryKey
Dim keyValue As String
keyValue = "Software\\Microsoft\\TestApp\\1.0"
regVersion = Microsoft.Win32.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。

Dim regVersion As Microsoft.Win32.RegistryKey
regVersion = Microsoft.Win32.Registry.CurrentUser.OpenSubKey( _
             "SOFTWARE\\Microsoft\\TestApp\\1.0", True)
If regVersion Is Nothing Then
    ' Key doesn't exist; create it.
    regVersion = Microsoft.Win32.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

请参见

任务

疑难解答:操作注册表

概念

Visual Basic 的结构化异常处理概述

常见的注册表任务

安全性与注册表

使用 My 读取和写入注册表

参考

SystemException

ApplicationException

My.Computer.Registry 对象