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

progray 2004-05-02 07:07:28
例如,A进程加载了A.dll,我如何在A进程运行的情况下将A.dll卸载掉?
...全文
26 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
回复
相关推荐
发帖
进程/线程/DLL
创建于2007-09-28

1.5w+

社区成员

VC/MFC 进程/线程/DLL
申请成为版主
帖子事件
创建了帖子
2004-05-02 07:07
社区公告
暂无公告