如何卸载其他进程加载的A.dll?

progray 2004-05-02 07:07:28
例如,A进程加载了A.dll,我如何在A进程运行的情况下将A.dll卸载掉?
...全文
59 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
halk 2004-05-04
  • 打赏
  • 举报
回复
明白了,不过我没试过,只能从原理上提些建议,讨论一下。

再一种情况是,即使进程结束了,可dll依然没有从内存中退出,依然无法删除。这就是我发贴的原因。
------------------
每当DLL加载到一个进程的时候,都会有相应的引用值,当这个值减到0的时候系统就把它从此进程中卸载了,进程结束的时候也一样会卸载它们;但是如果同时还有其它进程在引用这个DLL,那么仍然不能删掉,只有当所有的进程都把它卸载的时候,内存影像才会关闭,文件才能删掉。所以,删不掉很可能是还有其他进程在使用它。

好多dll我一时确定不了是哪个进程在使用
------------------
这该怎么办,一个一个的找?看看有没有别人给出更好的办法

而且即使确定了,由于该进程是服务或其他原因(如它就是explorer.exe结束了也没用,我迟早还是要运行它的)结束不掉
------------------
没别的办法,不能把服务都停掉吧?当然也可以试试,看看哪些是可以停掉而不至于down机的(从服务列表中停)。实在不行,就只能启动到dos去删了;如果是NTFS的分区DOS还看不见,不知道启动到win2k的诊断控制台能否删掉。




fenforever 2004-05-04
  • 打赏
  • 举报
回复
同意一楼,用远程线程调用GetModuleHandle获得a.dll的模块句柄,然后调用FreeLibrary卸载。
progray 2004-05-03
  • 打赏
  • 举报
回复
to halk(夜风) ,大哥,你想过没有,要是这么简单我没事发帖子问什么啊。
好多dll我一时确定不了是哪个进程在使用,而且即使确定了,由于该进程是服务或其他原因(如它就是explorer.exe结束了也没用,我迟早还是要运行它的)结束不掉,再一种情况是,即使进程结束了,可dll依然没有从内存中退出,依然无法删除。这就是我发贴的原因。
halk 2004-05-02
  • 打赏
  • 举报
回复
老兄,如果你的目的仅仅是想删dll文件,何必劳师动众去写什么程序,把那个进程关掉然后删dll不就是了
progray 2004-05-02
  • 打赏
  • 举报
回复
谢谢lovenoend(有容乃大) ,是否能详细的讲解一下,最好有代码示范,我不太清楚如何利用远程线程。A再次调用A.dll的情况可以不考虑,我主要想在卸载掉A.dll后就删除了A.dll。
lovenoend 2004-05-02
  • 打赏
  • 举报
回复
用远线程注入原理,
不过卸载掉A.dll后,若进程A又调用A.dll相关的,估计又载入A.dll

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧