当前位置:  开发笔记 > 编程语言 > 正文

使用C#应用程序在WinCE中保存注册表值

如何解决《使用C#应用程序在WinCE中保存注册表值》经验,为你挑选了1个好方法。

我正在使用带有触摸屏的WinCE 6.0系统,该系统将校准数据(xy位置,偏移等)存储在系统注册表(HKLM\HARDWARE\TOUCH)中.现在,我将cal值放入注册表项中,这些注册表项在构建时放入OS映像.这对我从原始校准值得到的监视器工作正常,但是当我将此图像加载到具有不同监视器的另一个系统时,触摸屏指针位置(可理解地)关闭,因为两个监视器没有相同的校准值.

我的问题是我不知道如何将值正确存储到注册表中,以便它们在重新启动后仍然存在.请参阅,我可以在第二个系统上重新校准屏幕,但新值仅存在于易失性存储器中.我向我的老板建议,我们可以告诉我们的客户始终将电源留在设备上 - 这样做并不顺利.

我需要有关如何将新常量保存到注册表中的建议,以便我们可以在将监视器发送给客户之前对其进行一次校准,而不必为我们构建的每个单元制作单独的操作系统映像.

已知在CE6.0中工作的AC#方法会有所帮助.谢谢.

-Odbasta



1> odbasta..:

对这个问题的后续行动:

感谢DannySmurf,冲洗注册表项最终需要完成的工作.但是,在达到该阶段之前,我缺少了一些步骤.所以,这是发现的事情:

我使用的是基于RAM的注册表,根据设计,注册表在冷启动后不会持久存在.我不得不将注册表切换到基于hive的.

切换到基于配置单元的注册表结构时,需要确保配置单元存在于非易失性介质上.这在platform.reg文件中指定:

[HKEY_LOCAL_MACHINE\init\BootVars]
"SystemHive"="\\Hard Disk\\system.hv"
"ProfileDir"="\\Documents and Settings"
"RegistryFlags"=dword:1               ; Flush hive on every RegCloseKey call
"SystemHiveInitialSize"=dword:19000   ; Initial size for hive-registry file 
"Start DevMgr"=dword:1

一旦system.hv文件在硬盘上(在我的情况下是CF卡),冷启动后注册表中的值将保持不变.请注意,system.hv文件包含所有HKLM密钥.

同样重要的是要注意,任何需要在引导时初始化的驱动程序都必须在解决方案的.reg文件中指定.例如,我必须确保在尝试从它们读取系统配置单元文件之前加载了硬盘驱动程序(PCMCIA).执行此操作的方法是围绕每个驱动程序初始化键以以下格式添加指令:

;HIVE BOOT SECTION
[HKEY_LOCAL_MACHINE\Drivers\PCCARD\PCMCIA\TEMPLATE\PCMCIA]
  "Dll"="pcmcia.dll"
  "NoConfig"=dword:1
  "IClass"=multi_sz:"{6BEAB08A-8914-42fd-B33F-61968B9AAB32}=PCMCIA Card Services"
  "Flags"=dword:1000
;END HIVE BOOT SECTION

加上很多运气,就是这个.


为了澄清,说基于RAM的注册表不会因设计而存在是不正确的.事实上,OEM可以专门实施HAL调用(http://technet.microsoft.com/en-us/query/aa447038),以便基于RAM的注册表能够持久存在.基于Hive的注册管理机构在CE 4.x之前并不存在,因此每个人都在"旧时代"中坚持注册管理机构.
推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有