怎样卸载外壳扩展的DLL?
我最近编写了一个外壳扩展的程序,一切运行正常。
可是,当我用regsvr32卸载后,却发现Dll不能被更改或删除。这说明Dll并没有完全被卸载,还在内存中。
请问,要完全卸载这样的Dll要怎么用程序实现呢?
请各位大虾帮一帮小弟,先谢谢了 :)
问题点数:100、回复次数:8Top
1 楼g961681(技术庸人(情商太低))回复于 2005-04-16 11:43:49 得分 10
学习Top
2 楼aiirii(ari-http://spaces.msn.com/members/aiirii/)回复于 2005-04-16 12:24:03 得分 10
>>请问,要完全卸载这样的Dll要怎么用程序实现呢?
有些,安装后就一直随系统一起运行,
你卸载后,还要重新启动电脑Top
3 楼Kingron(单身走我路……)回复于 2005-04-16 12:33:59 得分 10
regsvr32后,重新启动后就可删除。卸载已经OK了,但是因为已经被加载到内存,所以无法删除,注册表中已经删除了的。Top
4 楼jellypillar(新型人类)回复于 2005-04-16 13:18:46 得分 0
重新启动系统似乎太麻烦了。
我希望找到一种不重启,不注销,不杀Explorer就能解决的方案。请问有哪位知道吗?Top
5 楼nicotine(尼古丁)回复于 2005-04-17 14:59:43 得分 60
好像不能
如果你要删除这个dll可以用 MoveFileEx(pchar('c:\XXXXX.dll', Nil, MOVEFILE_REPLACE_EXISTING Or MOVEFILE_DELAY_UNTIL_REBOOT);这样下次重启就会删除。
或者通过在其它位置创建一个它的临时副本,并删除原位置的文件的方法,具体我不会(似乎9x不行),还有可以通过replace命令Top
6 楼caiso(十年磨一剑)回复于 2005-04-19 18:31:00 得分 10
顶一下Top
7 楼jellypillar(新型人类)回复于 2005-04-22 12:15:30 得分 0
请问还有谁有好方法吗?Top
8 楼jellypillar(新型人类)回复于 2005-04-22 13:32:33 得分 0
感谢nicotine(尼古丁),我已经解决了我的问题,解决方法如下:
第一步:用MoveFileEx(Source, Dest, MOVEFILE_REPLACE_EXISTING)将文件移到一个临时目录下。(原来正在使用的Dll是可以被移动的 :) )
第二步:用MoveFileEx(Source, nil, MOVEFILE_DELAY_UNTIL_REBOOT)在下一次开机时删除临时目录下的Dll
第三步:拷贝新的Dll到指定位置。Top




