我最近编写了一个外壳扩展的程序,一切运行正常。
可是,当我用regsvr32卸载后,却发现Dll不能被更改或删除。这说明Dll并没有完全被卸载,还在内存中。
请问,要完全卸载这样的Dll要怎么用程序实现呢?请各位大虾帮一帮小弟,先谢谢了  :)

解决方案 »

  1.   

    >>请问,要完全卸载这样的Dll要怎么用程序实现呢?有些,安装后就一直随系统一起运行,
    你卸载后,还要重新启动电脑
      

  2.   

    regsvr32后,重新启动后就可删除。卸载已经OK了,但是因为已经被加载到内存,所以无法删除,注册表中已经删除了的。
      

  3.   

    重新启动系统似乎太麻烦了。
    我希望找到一种不重启,不注销,不杀Explorer就能解决的方案。请问有哪位知道吗?
      

  4.   

    好像不能
    如果你要删除这个dll可以用 MoveFileEx(pchar('c:\XXXXX.dll', Nil, MOVEFILE_REPLACE_EXISTING Or MOVEFILE_DELAY_UNTIL_REBOOT);这样下次重启就会删除。
    或者通过在其它位置创建一个它的临时副本,并删除原位置的文件的方法,具体我不会(似乎9x不行),还有可以通过replace命令
      

  5.   

    感谢nicotine(尼古丁),我已经解决了我的问题,解决方法如下:第一步:用MoveFileEx(Source, Dest, MOVEFILE_REPLACE_EXISTING)将文件移到一个临时目录下。(原来正在使用的Dll是可以被移动的 :) )第二步:用MoveFileEx(Source, nil, MOVEFILE_DELAY_UNTIL_REBOOT)在下一次开机时删除临时目录下的Dll第三步:拷贝新的Dll到指定位置。