WinCE 上的程序 无法强制关闭

luyongcai   2010-1-11 13:46 楼主
WinCE系统拔出SD卡以后,在上面运行的程序并读取上面的文件就会失去响应,而且无法关闭(TerminateProcess无法关闭)。
怎样修改程序才能避免(在拔卡时)出现无法关闭的情况。

回复评论 (17)

你可以通过开发工具中自带的进程管理器来关闭不响应的程序,它的功能和XP下的任务管理器的功能一样;如果你的开发工具为EVC+SP4,那么你可以使用“工具”菜单下的Remote Process Viewer子项来关闭不响应的程序…通过程序修改不太清楚,学习一下+友情帮顶…
点赞  2010-1-11 13:57
SD卡都拔掉了 还能打开上面的文件吗?
点赞  2010-1-11 13:58
读不到文件就不读取就退出好了.
点赞  2010-1-11 14:02
对文件的读操作,做一些修改。
点赞  2010-1-11 14:19
引用: 引用 4 楼 yashi 的回复:
对文件的读操作,做一些修改。

这样最简单
点赞  2010-1-11 21:24
插入 卡 以后 程序在上面运行, 而且(读写)卡 上面的文件。
在此过程中拔掉 卡, 程序就会失去响应。 用 进程管理器 也无法关闭。

不只是我写的程序, 好多软件都是这样。
比方说: 一些知名的导航软件。

点赞  2010-1-12 11:15
有些时候,如果在读写卡上文件的时候 拔卡。CE系统也会down 机。
我不知道为什么会这样。
点赞  2010-1-12 11:17
是不是sd驱动的错误。
如果是sd驱动的错误, 原因是什么?

点赞  2010-1-12 11:18
应该不是SD驱动的错误,感觉就是你应用的问题。

帮顶下。我也学习下。
点赞  2010-1-12 11:34
是不能关闭,这个要从程序本身入手

在程序检测到SD卡拔出时,自己关闭. 现下PND上的导航软件,大都具有这具功能.
点赞  2010-1-12 12:52
在SD协议栈里面,不是SD主控制驱动所做的事情,,,这部分在客户端驱动与总线驱动里面去处理,,,所以,LZ出现这个现象,并不代表问题就在这个地方的
点赞  2010-1-12 13:05
“现在PND上的导航软件,大都具有这个功能.”

有谁研究过这个功能是怎样做的吗?

点赞  2010-1-13 16:34

系统在装载exe与dll的时候,是通过内存映射的方式来把exe/dll内容映射到内存。
在装载的时候,可以用pe section的标志位来控制:
是把exe/dll的内容复制到物理内存,
或者不全部复制,用到的时候再从文件来访问。


现在遇到的情况是:
如果,
修改pe section的标志位,使得在装载的时候,把exe/dll的内容复制到物理内存,
程序就能正常退出。
不过,
占用的物理内存比较多。

除了这样做(修改pe section),还有没有其它办法?

欢迎各路高手提供帮助!
无尽感谢!

点赞  2010-1-13 16:43
还是程序的问题,建议更改程序对文件的操作方式
点赞  2010-1-13 16:45
严格地讲:
“程序就能正常退出。”
是不对的。

我说的意思是:程序至少能够被kill掉,
而不至于变成连TerminateProcess也消除不了的zombie进程。

点赞  2010-1-13 16:48
我的想法是:拔卡以后再去调用读写文件(文件在卡上)的函数是没有意义的。

所以需要设置一个全局的标志位,拔卡以后进行设置。
所有读写文件的函数,在调用之前,要检查拔卡标志位。

如果已经拔卡,就不再读写。

点赞  2010-1-13 16:59
然而, exe/dll是从文件映射到内存的,
(如果装载的时候,没有复制到物理内存,)

拔卡以后,系统很可能会做上述没有意义的事情:
尝试从卡上“读取”exe/dll文件。

这种情况下,会出现什么结果呢?

点赞  2010-1-13 17:03
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复