中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

.NET Compact Framework下的注冊表怎么開發

發布時間:2021-10-28 09:43:40 來源:億速云 閱讀:158 作者:柒染 欄目:編程語言

.NET Compact Framework下的注冊表怎么開發,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

簡介

講述CF.net下的注冊表開發的基本概念,介紹在Windows Mobile和Wince下操作注冊表的工具,同時使用C#實現了一個注冊表導出工具。

背景

Wince和Windows桌面系統一樣都是把系統信息,驅動信息,應用程序信息等重要存放在注冊表里面。最近需要實現3G設備的自動注冊,3G鏈接項的自動創建功能。在實現該功能的過程中發現設備注冊信息和鏈接項信息均保存在注冊表里面,所以需要實現導出注冊表功能,把注冊前后的注冊表信息進行比較。

什么是注冊表

注冊表(Registry)其實就是一個層次型的文件數據庫,用于保存操作系統信息,驅動信息,應用程序信息,用戶信息等等。在注冊表內有兩個關鍵項,Key和Value,這里我保留英文,因為翻譯成中文是鍵(key)和值(Value)比較容易混淆。所謂Key就是可以包含SubKeyValue的項。可以理解為一個容器節點,SubKey和Key在本質上是一樣,SubKey可以繼續包含SubKey和Value。Value就是包含數據類型數據值的項,也可以理解為葉子節點,Value不能包含其他SubKeyValue

注冊表開發方案

查看和修改注冊表,推薦使用以下兩個工具:

Windows CE Remote Registry Editor,可以在VS 2005和VS 2008的菜單下找到。可以遠程查看和修改注冊表,非常方便。可是該工具不支持導入導出功能。

.NET Compact Framework下的注冊表怎么開發

PHM Registry Editor

該工具可以安裝在設備上,在設備上直接查看和修改注冊表。PHM Registry Editor同時支持導入導出功能,可是導入導出是使用私有格式,和MS的不兼容。

.NET Compact Framework下的注冊表怎么開發

注冊表開發的現實

由于上述兩個工具的局限性,所以我實現了一個注冊表導出功能,和桌面版的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。

下面是運行效果。

.NET Compact Framework下的注冊表怎么開發

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

關于.NET Compact Framework下的注冊表怎么開發問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

广元市| 漳浦县| 广汉市| 文成县| 山阴县| 城固县| 禹州市| 文安县| 黔西县| 金溪县| 石嘴山市| 永兴县| 融水| 塔河县| 洪江市| 迭部县| 柳河县| 南昌市| 鄱阳县| 尤溪县| 微山县| 平顶山市| 合山市| 雅安市| 会泽县| 旬阳县| 南华县| 兴山县| 新巴尔虎右旗| 长阳| 衡南县| 淮南市| 凤山市| 许昌县| 天津市| 三亚市| 台山市| 台东市| 金寨县| 福贡县| 宁化县|