利用VB.NET访问注册表

原创 2004年03月15日 09:16:00

利用VB.NET访问注册表<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

译者注:访问注册表的例子比较多,然而通过VB.NET访问注册表的例子并不多,本文翻译了一篇MSDN上的利用VB.NET存取注册表的例子,挺详细也挺全面的。 ( http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vstechart/html/vbtchimpdragdrop.asp)

Cat Francis
Visual Studio Team
Microsoft Corporation

April 2002

摘要:这篇文章描述了利用VB.NET内置函数DeleteSetting, GetAllSettings, GetSetting SaveSetting,以及通用语言运行时的两个类Registry RegistryKey来存取注册表的实例,详述了所需的权限,解释了何时利用注册表编辑器,并向你展示了如何利用程序从注册表中动态的读取数据及如何写入数据。

引言

当用VB.NET进行编程时,你可能会选择用VB.NET.NET框架中的Registry类中的函数来访问注册表。虽然大多数情况下VB.NET的内置函数足够用了,然而某些情况下你仍然需要.NET框架类来解决问题。

注册表不仅存储了本地机上一些程序的信息,还保存了操作系统的信息。操作注册表可能会有危险。因此编程时必须谨慎的查看代码,确保程序对所运行的机器上的安全不会构成威胁。

注册表入口点包括两部分:键名和键值。入口点是存储在系统中的键和子键,类似于文件系统中的目录和子目录。

必备知识

要想读懂本文需要有如下的必备知识:

1、熟悉上一个版本的Visual Basic

2、注册表设计和利用的知识。

3、理解访问注册表的安全含义。

VB.NET内置函数访问注册表

VB.NET提供了四个访问注册表的函数,为了使用它们,首先必须有读写权限。任何运行在全信任模式下的代码都必须有访问注册表的必要的权限。可以查看RegistryPermission类从而获得更多的信息。

VB.NET函数

描述

DeleteSetting

删除注册表中应用程序中的某项或键值

GetSetting

返回注册表中应用程序入口点的键值

GetAllSettings

返回注册表中程序入口点的一列键值

SaveSetting

在注册表中创建或保存程序的设置

注意:不能通过GetSetting函数返回某项的名字

如果无法保存某项的设置,将触发一个ArgumentException对象。参见ArgumentException可以获得更多的相关信息。

下面的例子在注册表中创建了一个主键和两个子键。首先打印主键的值,然后输出主键及其两个子键的值,然后删除第二个子键,在输出主键和第一个子键的值来确定是否删掉了第二个子键。

End Try

VB.NET内置的注册表访问函数是有限制的你只能访问到HKEY_CURRENT_USER/Software/VB and VBA Program Settings下的注册表项,而且要想访问到该项下的条目必须登录到系统,因为HKEY_CURRENT_USER主键在未登录情况下是不能访问的。

.NET框架访问注册表

上面提到,用VB.NET内置的注册表访问函数只能访问到HKEY_CURRENT_USER/Software/VB and VBA Program Settings下的注册表项,因而应用是很有限的。这时,你可以用.NET框架的Microsoft.Win32命名空间中的RegistryRegistryKey类来访问注册表。可参见RegistryRegistryKey

 

安全须知:向当前用户的注册表(Microsoft.Win32.Registry.CurrentUser)写入数据比向本地机的注册表(Microsoft.Win32.Registry.LocalMachine)写数据更安全。还有两一种情况,就是当你正在创建的键值已经被先前的另一个可能恶意的进程创建时,这就是典型的蹲坐。为了这种情况发生,用RegistryKey.GetValue方法来获得键值,当某个键不存在时该方法将返回Nothing

Registry类提供了一些可以访问注册表主键及其子键的一些方法,基键本身是只读的。下表列出了Registry类提供的访问注册表的方法

Key

Description

ClassesRoot

定义了关联到文档和属性的类型

CurrentConfig

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

CurrentUser

包含了当前用户参数的信息,例如环境变量

DynData

包含了动态注册表数据,如某些虚拟设备驱动器所用到的数据

LocalMachine

存储了本地机的配置数据,包括五个子键Hardware, SAM, Security, Software, and System

PerformanceData

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

Users

包含了默认用户参数的信息

 

下面的例子显示了如何从HKEY_CURRENT_USER读取一个DWORD键值:

接下来的例子是从HKEY_CURRENT_USER中读取,增加,并写入一个DWORD值:

End If

 

权限

System.Security.Permission命名空间中的RegistryPermission类操纵着访问注册表变量的能力。Registry变量存储在那些只有RegistryPermission的代码才能访问到的内存区域。类似的,当授予权限时只给它们能完成任务的最小的权限。参见RegistryPermission System.Security.Permissions

注册表访问权限值是由RegistryPermissionAccess枚举定义的,参见RegistryPermissionAccess获得更多信息,下表只列出其成员。

Value

Description

AllAccess

创建、读取和写入注册表变量的权限。

Create

创建注册表变量的权限。

NoAccess

不能访问注册表。

Read

读取注册表变量的权限。

Write

写入注册表变量的权限。

 

注意:如果你需要一些权限组合的话,例如你需要读写而不需要新建权限,你可以使用下面的位运算符,如下例:

RegistryPermissionAccess.Write Or RegistryPermissionAccess.Read _

"HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/TestApp"

 

使用注册表编辑器访问注册表

 

当你在配置你的工程时,你可能要用到注册表编辑器来对目标计算机的注册表添加键值。可参考Registry Editor获得更多信息。

访问注册表编辑器:

1、打开一个配置工程。

2、找到View菜单,指向Editor,然后点击Registry

在配置工程中使用注册表可参考Registry Settings Management in Deployment

结论:

注册表是一个存储应用程序信息和用户个人设置的理想位置,可以通过注册表来检查与你的程序正在交互的系统硬件或程序的信息。

大多数情况下,通过VB.NET运行时函数访问注册表就足够了,然而有时候你可能会用到.NET框架的RegistryRegistryKey类。这两种访问注册表的方法都很简单,但是这种方法有安全问题,必须小心谨慎,例如你不能在某个键中包含明文密码或其它的敏感信息。

VB.NET2005中如何使用my.Settings

旧方法: VB2003中使用.NET Framework 1.0 引入了带有 app.config 文件的配置文件概念。应用程序使用该文件来存储特定于应用程序的许多应用程序设置。该文件是一个简单的 X...
  • bronica_chen
  • bronica_chen
  • 2010年04月14日 17:01
  • 3804

vb.net配置文件的使用

机房收费系统个人版中大家都使用了配置文件,主要用于配置数据库的连接字符串。将连接字符串从代码中独立出来存储于配置文件中的好处是:可以灵活的连接不同的数据库实例。事实上,如果以参数的方式也可以实现类似的...
  • zhuojiajin
  • zhuojiajin
  • 2013年07月20日 20:19
  • 3167

VB.NET中访问注册表

  vb.net中访问注册表变得非常的简单。我们可以用  microsoft.Win32 名称空间的 下的 registry 类 和  registryKey 类。 另外 My.Computer.Re...
  • precipitant
  • precipitant
  • 2006年12月27日 19:43
  • 2840

VB.NET 轻松操作注册表

在.NET中操作注册表, 和VS STUDIO 时代,真是不可同日而语, .NET 之前的操作, 要引入大量的 API 函数,含有键值类型, 错误类型等, 繁琐的要死, 而.NET中,实现起来的简单程...
  • slightboy
  • slightboy
  • 2004年10月29日 12:24
  • 750

vb.net注册表基本操作

vb.net提供了microsoft.win32类,下面有三个子类,全是针对注册表的,Microsoft.Win32.RegistryKey、Microsoft.Win32.Registry、Micr...
  • u014189392
  • u014189392
  • 2017年09月23日 14:35
  • 309

vb.net操作注册表(增加 修改 删除 查询)

vb.net操作注册表(增加 修改 删除 查询)增加 Dim key As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.LocalMa...
  • ITshu
  • ITshu
  • 2009年05月25日 17:54
  • 3280

[VB.NET]读写注册表

读写注册表 实例说明在本实例中,我们将制作一个能读写注册表的程序。程序运行后,可以选择要添加、删除、修改或查询的键和键值。程序运行结果如图68-1所示。...
  • mohongmao
  • mohongmao
  • 2008年12月02日 20:58
  • 886

VBA使用GetSetting函数和SaveSetting函数读写注册表设置

Windows注册表是一个数据库,用于存储与计算机不同方面相关的设置,例如用户设置、应用程序设备、硬件设置等等。VB和VBA中提供了用于读写注册表的两个函数:GetSetting和SaveSettin...
  • iamlaosong
  • iamlaosong
  • 2014年03月04日 18:30
  • 3358

VB.NET WinForm读取App.config配置信息

VB.NET WinForm读取app.config信息     在configuration节点里配置键值,如实例:
  • fengqingtao2008
  • fengqingtao2008
  • 2014年07月30日 19:07
  • 7286

VB.NET 操作注册表的方法

  • 2012年02月07日 22:02
  • 464KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用VB.NET访问注册表
举报原因:
原因补充:

(最多只允许输入30个字)