Wince报"必须存在系统外壳才能对文件夹路径或外壳扩展的执行提供支持"

lincoln_111   2009-12-21 15:18 楼主
把系统自带的explorer.exe拿掉后,放上自己从目录C:\WINCE600\PUBLIC\SHELL\OAK\HPC\EXPLORER的代码里build出来的新的explorer.exe,运行时别的功能都正常,但打开文件夹时会报“必须存在系统外壳才能对文件夹路径或外壳扩展的执行提供支持”的错误。
编译时我把explorer.cpp文件中的RegisterShellAPIs()函数给注释掉了,因为实在找不出这个函数是从那来的,不知道报出的错误是不是和这有关。

回复评论 (9)

恭喜LZ!呵呵~~~
点赞  2009-12-23 20:50
自己顶
点赞  2009-12-22 17:09
解决了。
这个错就是因为注释掉了RegisterShellAPIs的原因,
RegisterShellAPIs在shellaygfuncs.lib
点赞  2009-12-23 20:32
显然是有关系的,你如果要定制Shell,最好不要注释掉这个函数。
如果只是不想Shell被显示,你只要去除任务栏和桌面的创建即可,这样重新编译后得到的Explorer.exe就没有界面了。但不影响你应用程序的使用,也就不会报这个错误了。
点赞  2009-12-21 15:35
可以看一下这里,也许能有点帮助。
http://www.cnblogs.com/we-hjb/archive/2008/12/28/1364070.html
点赞  2009-12-21 15:44
谢谢!我注释掉RegisterShellAPIs()是因为我找不到它是在那个文件定义的,你能告诉我吗?
点赞  2009-12-21 16:07
感谢xilidecai的回答。

请问一下explorer.exe里的哪几块代码和standard shell有关的了,我看explorer.exe好像也只是调用了几个shell api而已呀,删掉它为什么能影响到standard shell呢?
点赞  2009-12-21 21:38
现在100分时越来越多了!呵呵~~~
你的问题我没有遇见过!给你点参考,如果没有帮助就当顶帖吧!
如何定制自己的外壳

1、先开发一个外壳软件,假设名称为MyShell.exe  
2、删除注册表[HKEY_LOCAL_MACHINE\init]下如下一行:  
  "Launch50"="explorer.exe"  
3、在注册表[HKEY_LOCAL_MACHINE\init]下添加如下一行:  
  "Launch50"="MyShell.exe"  
上述的“LaunchXX”中的XX为序列数,内核依据这个序列数按由小到大的顺序来分别执行所有子键列出的应用程序,具体数值应该为多少请参考帮助文档的说明。  
如果原来的内核中添加了标准外壳(standard shell)组件,或者添加了其它组件而这些组件需要依赖标准外壳,那么在PB中是无法删除标准外壳组件的,解决办法一是保留explorer.exe在内核中,二是删除依赖标准外壳的组件。  
点赞  2009-12-21 21:24
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复