【IT168技术文档】
简介
本文讲述了CF.net下的注册表开发的基本概念,介绍在Windows Mobile和Wince下操作注册表的工具,同时使用C#实现了一个注册表导出工具。
背景
Wince和Windows桌面系统一样都是把系统信息,驱动信息,应用程序信息等重要存放在注册表里面。最近需要实现3G设备的自动注册,3G链接项的自动创建功能。在实现该功能的过程中发现设备注册信息和链接项信息均保存在注册表里面,所以需要实现导出注册表功能,把注册前后的注册表信息进行比较。
什么是注册表
注册表(Registry)其实就是一个层次型的文件数据库,用于保存操作系统信息,驱动信息,应用程序信息,用户信息等等。在注册表内有两个关键项,Key和Value,这里我保留英文,因为翻译成中文是键(key)和值(Value)比较容易混淆。所谓Key就是可以包含SubKey和Value的项。可以理解为一个容器节点,SubKey和Key在本质上是一样,SubKey可以继续包含SubKey和Value。Value就是包含数据类型,数据值的项,也可以理解为叶子节点,Value不能包含其他SubKey和Value。
方案
查看和修改注册表,推荐使用以下两个工具:
Windows CE Remote Registry Editor
Windows CE Remote Registry Editor可以在VS 2005和VS 2008的菜单下找到。可以远程查看和修改注册表,非常方便。可是该工具不支持导入导出功能。
PHM Registry Editor
该工具可以安装在设备上,在设备上直接查看和修改注册表。PHM Registry Editor只是支持导入功能,不支持导出功能,同时导出是使用私有格式,和MS的不兼容。
现实
由于上述两个工具的局限性,所以我实现了一个注册表导出功能,和桌面版的Registry Editor导出功能的文件格式兼容。
操作注册表类是在CF.net 2.0引入的,CF.net 1.0不支持。使用注册表功能,需要引用Microsoft.Win32 namespace。
using Microsoft.Win32;
下面是导出接口,把根下所有的key导出到StringBuilder中。
public StringBuilder Export()
{
StringBuilder sb = new StringBuilder();
Export(sb, Registry.ClassesRoot);
Export(sb, Registry.CurrentUser);
Export(sb, Registry.LocalMachine);
Export(sb, Registry.Users);
return sb;
}
在Windows Mobile和Wince系统下注册表的项比桌面系统少一些,如上图可见。