千家信息网

.NET Compact Framework下的注册表怎么开发

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,.NET Compact Framework下的注册表怎么开发,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。简介讲述CF.net下的
千家信息网最后更新 2026年11月02日.NET Compact Framework下的注册表怎么开发

.NET Compact Framework下的注册表怎么开发,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

简介

讲述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,可以在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系统下注册表的项比桌面系统少一些,如上图可见。

下面的代码是导出具体的一个key。

 public void Export(StringBuilder sb, RegistryKey key)  {      //log down itself.      sb.AppendFormat(CultureInfo.CurrentCulture, "\r\n[{0}]\r\n", key.Name);       //log down values      string[] s = key.GetValueNames();      Array.Sort(s);            //log down "Default" first      try      {          key.GetValue(Default);          ExportValue(sb, key, Default);      }      catch      {      }      foreach(string name in s)      {          if (!name.Equals(Default))          {  ExportValue(sb, key, name);          }      }       //log down subkeys      s = key.GetSubKeyNames();      Array.Sort(s);      foreach(string subKeyName in s)      {          Export(sb, key.OpenSubKey(subKeyName));      }  }

导出Key是先导出自身,然后导出Value,导出Value时如果有Default Value的话先导出Default Value,然后导出其他Value。导出Value后再递归导出SubKeys。

下面代码是导出Value。

private void ExportValue(StringBuilder sb, RegistryKey key, string name)         {             switch (key.GetValueKind(name))             {                 case RegistryValueKind.DWord:                     int dword = (int)key.GetValue(name);                     if (name.Equals(Default))                     {                         sb.AppendFormat(CultureInfo.CurrentCulture, "@=dword:{0:X8}\r\n", dword);                     }                     else                     {                         sb.AppendFormat(CultureInfo.CurrentCulture, "\"{0}\"=dword:{1:X8}\r\n", name, dword);                     }                     break;                 case RegistryValueKind.String:                     if (name.Equals(Default))                     {                         sb.AppendFormat(CultureInfo.CurrentCulture, "@=\"{0}\"\r\n", key.GetValue(name));                     }                     else                     {                         sb.AppendFormat(CultureInfo.CurrentCulture, "\"{0}\"=\"{1}\"\r\n", name, key.GetValue(name));                     }                      break;                 case RegistryValueKind.MultiString:                     string[] values = (string[])key.GetValue(name);                     if (name.Equals(Default))                     {                         sb.Append("@=multi_sz:");                     }                     else                     {                         sb.AppendFormat(CultureInfo.CurrentCulture, "\"{0}\"=multi_sz:", name);                     }                       for (int i = 0; i < values.Length; i++)                     {                         if (i != 0)                         {                             sb.Append(",");                         }                         sb.AppendFormat(CultureInfo.CurrentCulture, "\"{0}\"", values[i]);                     }                     sb.Append("\r\n");                     break;                 case RegistryValueKind.Binary:                     byte[] bytes = (byte[])key.GetValue(name);                     if (name.Equals(Default))                     {                         sb.Append("@=hex:");                     }                     else                     {                         sb.AppendFormat(CultureInfo.CurrentCulture, "\"{0}\"=hex:", name);                     }                      int j = 0;                     for (int i = 0; i < bytes.Length; i++)                     {                         // Display each byte as two hexadecimal digits.                         if (i == (bytes.Length - 1))                         {                             sb.AppendFormat(CultureInfo.CurrentCulture, "{0:X2}", bytes[i]);                         }                         else                         {                             sb.AppendFormat(CultureInfo.CurrentCulture, "{0:X2},", bytes[i]);                         }                          ++j;                         if (j == 25)                         {                             j = 0;                             sb.Append("\\\r\n");                         }                     }                     sb.Append("\r\n");                     break;             }         }

由于Value有不同的数据类型,导出的时候根据数据类型来导出不同的格式。key.GetValueKind()函数可以取出Key数据类型RegistryValueKind。

下面是运行效果。

环境:Visual Studio 2008 + Windows Mobile 6 professional SDK + .NET Compact Framework 2.0

关于.NET Compact Framework下的注册表怎么开发问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

注册表 信息 功能 工具 数据 开发 系统 类型 两个 就是 格式 桌面 设备 问题 支持 不同 代码 同时 应用程序 文件 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 云之行互联网科技 互联网科技的 网络科技有限互联网 互联网科技与金融科技 智慧科技互联网 互联网科技缩写 互联网科技美容 上海电发互联网科技有限公司 江苏南京365互联网科技 中国的互联网科技企业的崛起 深圳育鹏互联网科技有限公司招聘 互联网行业科技股 阿里互联网科技企业 伍佰万互联网科技怎么赚钱 黑云互联网科技有限公司 郑州欣桑互联网科技有限公司 广东鹅鹅鹅互联网科技有限公司 西安左小互联网科技有限公司 盐城市攀科互联网科技有限公司 知域互联网科技有限公司官网 新华互联网科技学院 掌上梦互联网科技 北京大学互联网科技怎么样 青海科技产业互联网发展 雨阳互联网卡科技有限公司 2021世界互联网领先科技成果发布 保山互联网科技靠谱吗 科技信息时代互联网发展 互联网科技对化妆品行业 东风日产互联网科技公司叫什么
0