WINCE6.0选择RAM and ROM file system如何实现program files、桌面、windows目录下文件重启不丢失

时间:2020-12-16 17:41:20
大家好,现在的WINCE6.0产品,选择的是RAM and ROM file system,如何能够如何实现program files、桌面、windows目录下文件重启不丢失,麻烦大家分享一下实现的办法和细节,先谢谢了。

21 个解决方案

#2


  1. 修改ShellFolder.  内核启动时候,filesys.exe会根据initobj.dat来创建一些系统目录和文件, 默认是在根目录,也就是RAM盘中创建Desktop, my document...这些目录。explorer.exe程序会根据注册表配置指定的Shell Folders,默认的指向上面RAM盘下filesys.exe创建的这些目录。因此, 我们可以修改注册表来重定向这些路径,指向flash到目录。 如下是一个示例:
[HKEY_LOCAL_MACHINE/System/Explorer/Shell Folders]
"My Documents"="//SDMMC//My Documents"
"Desktop"="//ResidentFlash//Desktop"
"Application Data"="//ResidentFlash//Application Data"
"Favorites"="//ResidentFlash//Favorites"
"Programs"="//ResidentFlash//Programs"
这样,重启之后, 这些目录下面的内容就不会丢失。

#3


我也很想知道有谁实现了?

用ROM Only文件系统的话,总觉得很乱,能用RAM and ROM file system,并且可以将windows 目录映射到residentflash就最好了。

楼上的方法,只能映射桌面之类,不能解决windows 目录!

#4


引用 楼  的回复:
     2. windows目录。 这个是最重要的, 因为一些dll必须放在这个目录或者根目录下面。可是每次重启后, 都会丢失。 WinCE又没有环境变量这样的概念。 安装文件cab一般都把文件放到windows目录下面。 如何解决? 其实, LoadLibrary时候会搜索几个路径, 除了上面提到windows和根目录, 还有“当前目录”, 可以拷贝dll到当前目录。 此外, 注册表还提供了一个SystemPath到配置, 很类似环境变量, 在注册表可以指定一个或多个系统路径。查看这篇msdn: http://msdn.microsoft.com/en-us/library/ms886736.aspx


这种方法也不太行,很多文件安装是直接指定在"\windows\"目录,包括一些非dll文件。

#5


引用 3 楼  的回复:
我也很想知道有谁实现了?

用ROM Only文件系统的话,总觉得很乱,能用RAM and ROM file system,并且可以将windows 目录映射到residentflash就最好了。

楼上的方法,只能映射桌面之类,不能解决windows 目录!

是的,比如"Programs"="\\Windows\\Programs"改为"Programs"="\\SysDisk\\Programs",但在windows目录下还是会有Programs这个文件夹,而且SysDisk盘符下面也有Programs这个文件夹,我想要的效果是,如何解决这个问题?如果我想要Programs这个文件夹还是在windows目录下,但SysDisk盘符下面不能再有Programs这个文件夹,或者反过来。麻烦大家指教和分享,谢谢了。

#6


引用 3 楼  的回复:
我也很想知道有谁实现了?

用ROM Only文件系统的话,总觉得很乱,能用RAM and ROM file system,并且可以将windows 目录映射到residentflash就最好了。

楼上的方法,只能映射桌面之类,不能解决windows 目录!

是的,比如"Programs"="\\Windows\\Programs"改为"Programs"="\\SysDisk\\Programs",但在windows目录下还是会有Programs这个文件夹,而且SysDisk盘符下面也有Programs这个文件夹,我想要的效果是,如何解决这个问题?如果我想要Programs这个文件夹还是在windows目录下,但SysDisk盘符下面不能再有Programs这个文件夹,或者反过来。麻烦大家指教和分享,谢谢了。

#7


引用 4 楼  的回复:
引用 楼 的回复:
2. windows目录。 这个是最重要的, 因为一些dll必须放在这个目录或者根目录下面。可是每次重启后, 都会丢失。 WinCE又没有环境变量这样的概念。 安装文件cab一般都把文件放到windows目录下面。 如何解决? 其实, LoadLibrary时候会搜索几个路径, 除了上面提到windows和根目录, 还有“当前目录”, 可以拷贝dll到当前目录。 此外, 注册……

这位朋友方便留下QQ吗?我的是597038165,便于相互交流

#8


引用 1 楼  的回复:
关于wince的永久保存

这个方法我用过了 重启后桌面新建的文件夹还是没了  难道是板子不同nandflash命名有区别吗
"//ResidentFlash//Desktop"
还有  我此种方式把我编译内核的桌面快捷方式也没了  为什么

#9


组件选SYSGEN_FSRAMROM SYSGEN_FSREGHIVE
BSP bat文件加上:set IMGREGHIVE=1
if /i "%IMGREGHIVE%"=="1" set PRJ_ENABLE_FSREGHIVE=1
if /i "%IMGREGHIVE%"=="1" set PRJ_ENABLE_REGFLUSH_THREAD=1
if /i "%IMGREGHIVE%"=="1" set PRJ_ENABLE_FSMOUNTASROOT=1
if /i "%IMGREGHIVE%"=="1" set PRJ_BOOTDEVICE_MSFLASH=1

#10


引用 9 楼  的回复:
组件选SYSGEN_FSRAMROM SYSGEN_FSREGHIVE
BSP bat文件加上:set IMGREGHIVE=1
if /i "%IMGREGHIVE%"=="1" set PRJ_ENABLE_FSREGHIVE=1
if /i "%IMGREGHIVE%"=="1" set PRJ_ENABLE_REGFLUSH_THREAD=1
if /i "%IMGREGHIVE%……

非常感谢,抽空试一下

#11


最近也在愁关于永久保存的问题,因为我需要在系统下安装SQL 3.5数据库,重启之后数据库就无法使用了。后来我通过注册表修改一些启动文件的存放位置(我改到NAND FLASH里面去了,安装完成之后本应该在WINDOWS下的文件我复制到NANDFLASH里面了)然后数据库在程序里面可以操作,但是直接打开数据库无法打开。
至于桌面、windows下的文件想要重启不丢失的话,有一种方法是把这些文件做到操作系统内核里面去,当然这是一种笨方法,自己不能从WINCE的操作者的角度保存桌面和windows,只能从操作系统版本制作者的角度解决问题。说的有点乱,希望可以给你一点思路

#12


WINCE系统是映像加载的,不可能保存进去的.可以用以下办法变通一下.
1、用PB直接把用到的文件放到windows目录下,通过更改PB的.bib文件实现,然后重新生成映像文件。
2、自已写一个启动程序,启动时把相关文件拷到windows目录下。

#13


引用 12 楼 czsuperbaby 的回复:
WINCE系统是映像加载的,不可能保存进去的.可以用以下办法变通一下.
1、用PB直接把用到的文件放到windows目录下,通过更改PB的.bib文件实现,然后重新生成映像文件。
2、自已写一个启动程序,启动时把相关文件拷到windows目录下。


我同意这个说法

这个我实现过,后来放弃了,为什么?!

因为如果在桌面在哪里都能保持的,你会发现系统会越来越慢的!
因为垃圾越来越多,你看windows 就是这样了,windows还有一些垃圾清除软件,但是wince没有

所以后来我还是用ram and rom 文件系统,而不是rom only 文件系统。

#14


BTW windows mobile 就是rom 文件系统的,
你也会知道这个东西越用越慢。
并且也会带来危险,要么不怎么安全的应用安装上去,系统变慢了,就得刷系统还原了。

wince的稳定这点,也有这个文件系统这种特性的功劳。

#15


新的产品我们选择的是RAM and ROM文件系统,之前的产品选择的是ROM-only,因为涉及的用户数量大,而且使用时间长,他们已经习惯了,就不改了。

#16


你用RAM and ROM那你装的cab文件会丢失哦

#17


引用 9 楼 hudaweikevin 的回复:
组件选SYSGEN_FSRAMROM SYSGEN_FSREGHIVE
BSP bat文件加上:set IMGREGHIVE=1
if /i "%IMGREGHIVE%"=="1" set PRJ_ENABLE_FSREGHIVE=1
if /i "%IMGREGHIVE%"=="1" set PRJ_ENABLE_REGFLUSH_THREAD=1
if /i ……

PRJ_ENABLE_FSREGHIVE等这些环境变量的具体作用是什么?

#18


是public\common\oak\files\common.reg中的条件
怀疑是否可行,wince5.0设置这些变量就可以了,
6.0待证实

#19


引用 17 楼 LoongEmbedded 的回复:
引用 9 楼 hudaweikevin 的回复:组件选SYSGEN_FSRAMROM SYSGEN_FSREGHIVE
BSP bat文件加上:set IMGREGHIVE=1
if /i "%IMGREGHIVE%"=="1" set PRJ_ENABLE_FSREGHIVE=1
if /i "%IMGREGHIVE%"=="1" set PRJ_ENABLE_R……


引用 9 楼 hudaweikevin 的回复:
组件选SYSGEN_FSRAMROM SYSGEN_FSREGHIVE
BSP bat文件加上:set IMGREGHIVE=1
if /i "%IMGREGHIVE%"=="1" set PRJ_ENABLE_FSREGHIVE=1
if /i "%IMGREGHIVE%"=="1" set =1
if /i ……


从上倒下顺序

1.PRJ_ENABLE_FSREGHIVE表示开启HIVE File system
2.PRJ_ENABLE_REGFLUSH_THREAD表示创建一个周期性的刷新注册表的线程,那么哪里设置这个线程的周期刷新时间呢?
请看[HKEY_LOCAL_MACHINE/System/ObjectStore/RegFlush]
    "SpawnThread"=dword:1
    "FlushPriority256"=dword:FF
    "FlushPeriod"=dword:3E8   单位是毫秒

3.PRJ_ENABLE_FSMOUNTASROOT启动安装一个外部存储体,例如flash作为 根文件系统
4.最后一个PRJ_BOOTDEVICE_MSFLASH实际上是多余的,这个同等于设置1和3 叠加。

好久没来csdn了,还是能看到各位熟人。。

#20


引用 19 楼 AAa_tnT 的回复:
引用 17 楼 LoongEmbedded 的回复:引用 9 楼 hudaweikevin 的回复:组件选SYSGEN_FSRAMROM SYSGEN_FSREGHIVE
BSP bat文件加上:set IMGREGHIVE=1
if /i "%IMGREGHIVE%"=="1" set PRJ_ENABLE_FSREGHIVE=1
if /i "%IMGREGHI……

非常感谢,你的生活挺多姿多彩了,估计过不了几年,全世界都让你走遍了,哈哈

#21


系统选择RAM and ROM file system,在定制一个俄语的系统,我们系统有其中一个盘符Sysdisk,把桌面映射到Sysdisk中,对于中文和英文的系统已经实现了,但是俄语的还实现不了,麻烦大家指导一下,先谢谢了。下面是我在platform.reg中添加的内容:
[HKEY_LOCAL_MACHINE\System\Explorer\Shell Folders]
IF LOCALE==0804
"Desktop"="\\SysDisk\\桌面"
ENDIF
IF LOCALE==0404
"Desktop"="\\SysDisk\\"
ENDIF
IF LOCALE==0409
"Desktop"="\\SysDisk\\Desktop"
ENDIF
IF LOCALE==0419
"Рабочий стол"="\\SysDisk\\Рабочий стол"
ENDIF
其中0419是俄语的,但不知道为什么不行。

#1


#2


  1. 修改ShellFolder.  内核启动时候,filesys.exe会根据initobj.dat来创建一些系统目录和文件, 默认是在根目录,也就是RAM盘中创建Desktop, my document...这些目录。explorer.exe程序会根据注册表配置指定的Shell Folders,默认的指向上面RAM盘下filesys.exe创建的这些目录。因此, 我们可以修改注册表来重定向这些路径,指向flash到目录。 如下是一个示例:
[HKEY_LOCAL_MACHINE/System/Explorer/Shell Folders]
"My Documents"="//SDMMC//My Documents"
"Desktop"="//ResidentFlash//Desktop"
"Application Data"="//ResidentFlash//Application Data"
"Favorites"="//ResidentFlash//Favorites"
"Programs"="//ResidentFlash//Programs"
这样,重启之后, 这些目录下面的内容就不会丢失。

#3


我也很想知道有谁实现了?

用ROM Only文件系统的话,总觉得很乱,能用RAM and ROM file system,并且可以将windows 目录映射到residentflash就最好了。

楼上的方法,只能映射桌面之类,不能解决windows 目录!

#4


引用 楼  的回复:
     2. windows目录。 这个是最重要的, 因为一些dll必须放在这个目录或者根目录下面。可是每次重启后, 都会丢失。 WinCE又没有环境变量这样的概念。 安装文件cab一般都把文件放到windows目录下面。 如何解决? 其实, LoadLibrary时候会搜索几个路径, 除了上面提到windows和根目录, 还有“当前目录”, 可以拷贝dll到当前目录。 此外, 注册表还提供了一个SystemPath到配置, 很类似环境变量, 在注册表可以指定一个或多个系统路径。查看这篇msdn: http://msdn.microsoft.com/en-us/library/ms886736.aspx


这种方法也不太行,很多文件安装是直接指定在"\windows\"目录,包括一些非dll文件。

#5


引用 3 楼  的回复:
我也很想知道有谁实现了?

用ROM Only文件系统的话,总觉得很乱,能用RAM and ROM file system,并且可以将windows 目录映射到residentflash就最好了。

楼上的方法,只能映射桌面之类,不能解决windows 目录!

是的,比如"Programs"="\\Windows\\Programs"改为"Programs"="\\SysDisk\\Programs",但在windows目录下还是会有Programs这个文件夹,而且SysDisk盘符下面也有Programs这个文件夹,我想要的效果是,如何解决这个问题?如果我想要Programs这个文件夹还是在windows目录下,但SysDisk盘符下面不能再有Programs这个文件夹,或者反过来。麻烦大家指教和分享,谢谢了。

#6


引用 3 楼  的回复:
我也很想知道有谁实现了?

用ROM Only文件系统的话,总觉得很乱,能用RAM and ROM file system,并且可以将windows 目录映射到residentflash就最好了。

楼上的方法,只能映射桌面之类,不能解决windows 目录!

是的,比如"Programs"="\\Windows\\Programs"改为"Programs"="\\SysDisk\\Programs",但在windows目录下还是会有Programs这个文件夹,而且SysDisk盘符下面也有Programs这个文件夹,我想要的效果是,如何解决这个问题?如果我想要Programs这个文件夹还是在windows目录下,但SysDisk盘符下面不能再有Programs这个文件夹,或者反过来。麻烦大家指教和分享,谢谢了。

#7


引用 4 楼  的回复:
引用 楼 的回复:
2. windows目录。 这个是最重要的, 因为一些dll必须放在这个目录或者根目录下面。可是每次重启后, 都会丢失。 WinCE又没有环境变量这样的概念。 安装文件cab一般都把文件放到windows目录下面。 如何解决? 其实, LoadLibrary时候会搜索几个路径, 除了上面提到windows和根目录, 还有“当前目录”, 可以拷贝dll到当前目录。 此外, 注册……

这位朋友方便留下QQ吗?我的是597038165,便于相互交流

#8


引用 1 楼  的回复:
关于wince的永久保存

这个方法我用过了 重启后桌面新建的文件夹还是没了  难道是板子不同nandflash命名有区别吗
"//ResidentFlash//Desktop"
还有  我此种方式把我编译内核的桌面快捷方式也没了  为什么

#9


组件选SYSGEN_FSRAMROM SYSGEN_FSREGHIVE
BSP bat文件加上:set IMGREGHIVE=1
if /i "%IMGREGHIVE%"=="1" set PRJ_ENABLE_FSREGHIVE=1
if /i "%IMGREGHIVE%"=="1" set PRJ_ENABLE_REGFLUSH_THREAD=1
if /i "%IMGREGHIVE%"=="1" set PRJ_ENABLE_FSMOUNTASROOT=1
if /i "%IMGREGHIVE%"=="1" set PRJ_BOOTDEVICE_MSFLASH=1

#10


引用 9 楼  的回复:
组件选SYSGEN_FSRAMROM SYSGEN_FSREGHIVE
BSP bat文件加上:set IMGREGHIVE=1
if /i "%IMGREGHIVE%"=="1" set PRJ_ENABLE_FSREGHIVE=1
if /i "%IMGREGHIVE%"=="1" set PRJ_ENABLE_REGFLUSH_THREAD=1
if /i "%IMGREGHIVE%……

非常感谢,抽空试一下

#11


最近也在愁关于永久保存的问题,因为我需要在系统下安装SQL 3.5数据库,重启之后数据库就无法使用了。后来我通过注册表修改一些启动文件的存放位置(我改到NAND FLASH里面去了,安装完成之后本应该在WINDOWS下的文件我复制到NANDFLASH里面了)然后数据库在程序里面可以操作,但是直接打开数据库无法打开。
至于桌面、windows下的文件想要重启不丢失的话,有一种方法是把这些文件做到操作系统内核里面去,当然这是一种笨方法,自己不能从WINCE的操作者的角度保存桌面和windows,只能从操作系统版本制作者的角度解决问题。说的有点乱,希望可以给你一点思路

#12


WINCE系统是映像加载的,不可能保存进去的.可以用以下办法变通一下.
1、用PB直接把用到的文件放到windows目录下,通过更改PB的.bib文件实现,然后重新生成映像文件。
2、自已写一个启动程序,启动时把相关文件拷到windows目录下。

#13


引用 12 楼 czsuperbaby 的回复:
WINCE系统是映像加载的,不可能保存进去的.可以用以下办法变通一下.
1、用PB直接把用到的文件放到windows目录下,通过更改PB的.bib文件实现,然后重新生成映像文件。
2、自已写一个启动程序,启动时把相关文件拷到windows目录下。


我同意这个说法

这个我实现过,后来放弃了,为什么?!

因为如果在桌面在哪里都能保持的,你会发现系统会越来越慢的!
因为垃圾越来越多,你看windows 就是这样了,windows还有一些垃圾清除软件,但是wince没有

所以后来我还是用ram and rom 文件系统,而不是rom only 文件系统。

#14


BTW windows mobile 就是rom 文件系统的,
你也会知道这个东西越用越慢。
并且也会带来危险,要么不怎么安全的应用安装上去,系统变慢了,就得刷系统还原了。

wince的稳定这点,也有这个文件系统这种特性的功劳。

#15


新的产品我们选择的是RAM and ROM文件系统,之前的产品选择的是ROM-only,因为涉及的用户数量大,而且使用时间长,他们已经习惯了,就不改了。

#16


你用RAM and ROM那你装的cab文件会丢失哦

#17


引用 9 楼 hudaweikevin 的回复:
组件选SYSGEN_FSRAMROM SYSGEN_FSREGHIVE
BSP bat文件加上:set IMGREGHIVE=1
if /i "%IMGREGHIVE%"=="1" set PRJ_ENABLE_FSREGHIVE=1
if /i "%IMGREGHIVE%"=="1" set PRJ_ENABLE_REGFLUSH_THREAD=1
if /i ……

PRJ_ENABLE_FSREGHIVE等这些环境变量的具体作用是什么?

#18


是public\common\oak\files\common.reg中的条件
怀疑是否可行,wince5.0设置这些变量就可以了,
6.0待证实

#19


引用 17 楼 LoongEmbedded 的回复:
引用 9 楼 hudaweikevin 的回复:组件选SYSGEN_FSRAMROM SYSGEN_FSREGHIVE
BSP bat文件加上:set IMGREGHIVE=1
if /i "%IMGREGHIVE%"=="1" set PRJ_ENABLE_FSREGHIVE=1
if /i "%IMGREGHIVE%"=="1" set PRJ_ENABLE_R……


引用 9 楼 hudaweikevin 的回复:
组件选SYSGEN_FSRAMROM SYSGEN_FSREGHIVE
BSP bat文件加上:set IMGREGHIVE=1
if /i "%IMGREGHIVE%"=="1" set PRJ_ENABLE_FSREGHIVE=1
if /i "%IMGREGHIVE%"=="1" set =1
if /i ……


从上倒下顺序

1.PRJ_ENABLE_FSREGHIVE表示开启HIVE File system
2.PRJ_ENABLE_REGFLUSH_THREAD表示创建一个周期性的刷新注册表的线程,那么哪里设置这个线程的周期刷新时间呢?
请看[HKEY_LOCAL_MACHINE/System/ObjectStore/RegFlush]
    "SpawnThread"=dword:1
    "FlushPriority256"=dword:FF
    "FlushPeriod"=dword:3E8   单位是毫秒

3.PRJ_ENABLE_FSMOUNTASROOT启动安装一个外部存储体,例如flash作为 根文件系统
4.最后一个PRJ_BOOTDEVICE_MSFLASH实际上是多余的,这个同等于设置1和3 叠加。

好久没来csdn了,还是能看到各位熟人。。

#20


引用 19 楼 AAa_tnT 的回复:
引用 17 楼 LoongEmbedded 的回复:引用 9 楼 hudaweikevin 的回复:组件选SYSGEN_FSRAMROM SYSGEN_FSREGHIVE
BSP bat文件加上:set IMGREGHIVE=1
if /i "%IMGREGHIVE%"=="1" set PRJ_ENABLE_FSREGHIVE=1
if /i "%IMGREGHI……

非常感谢,你的生活挺多姿多彩了,估计过不了几年,全世界都让你走遍了,哈哈

#21


系统选择RAM and ROM file system,在定制一个俄语的系统,我们系统有其中一个盘符Sysdisk,把桌面映射到Sysdisk中,对于中文和英文的系统已经实现了,但是俄语的还实现不了,麻烦大家指导一下,先谢谢了。下面是我在platform.reg中添加的内容:
[HKEY_LOCAL_MACHINE\System\Explorer\Shell Folders]
IF LOCALE==0804
"Desktop"="\\SysDisk\\桌面"
ENDIF
IF LOCALE==0404
"Desktop"="\\SysDisk\\"
ENDIF
IF LOCALE==0409
"Desktop"="\\SysDisk\\Desktop"
ENDIF
IF LOCALE==0419
"Рабочий стол"="\\SysDisk\\Рабочий стол"
ENDIF
其中0419是俄语的,但不知道为什么不行。