如何更新正在使用得文件

lsgt 2005-07-11 04:25:56
我做了一个随Windows Explorer 一起启动的DLL,现在想对这个DLL进行升级,覆盖此文件的时候失败,因为该DLL正在使用。

当然,可以通过Winint.ini或者MoveFileEx来让操作系统重启的时候更新,或者杀掉explorer.exe进程之后更新,但我在GOOGLE上搜到一个工具叫unlocker,它可以把我的DLL解锁,然后就可以覆盖了(不用重起explorer进程),我想知道它是通过什么原理来做到这一点的,我没有有办法用它的原理来实现更新不用重启?

unlocker是一个自由软件,主页在:http://ccollomb.free.fr/unlocker/
下载地址:http://ccollomb.free.fr/unlocker/unlocker1.6.5.exe
...全文
117 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsgt 2005-07-14
  • 打赏
  • 举报
回复
自己UP一下
lsgt 2005-07-12
  • 打赏
  • 举报
回复
非常感谢 idAnts(你才无聊呢)

刚试验了,这样是可以的。我是这样测试的,做了两个DLL:MyDll和UnloadDll。然后在一个程序TEST里面首先加载MyDll,随后加载UnloadDll并且用GetModuleHandle得到MyDll的句柄,然后用FreeLibrary卸载它。

不过还是有一些问题:

1 Freelibray之后,在TEST里面保存的MyDll的句柄实际上已经被UnLoadDll卸载,但TEST怎样才能知道该句柄已经无效了?

2 实际中我需要卸载的DLL是加载到Explorer里面的,那我的UnloadDll也应该加载到Explorer里面,这个怎样实现?而且我希望UnloadDll加载进去之后立刻执行卸载MyDll,完成之后就卸载自己。能做到吗?

非常感谢。
idAnts 2005-07-12
  • 打赏
  • 举报
回复
我公司有下载限制,我下不了。但我知道有种方法,就是你自己做一个dll,然后挂到Explorer 上,你的这个dll运行FreeLibrary 这个函数来卸载掉你原先的那个dll。但这个方法我没实现过,只是觉得这样是可行的。
liuduofu 2005-07-12
  • 打赏
  • 举报
回复
它是不是截止了进程的一个线程,然后直接覆盖DLL以后,在重新开启这个线程.
saliors 2005-07-12
  • 打赏
  • 举报
回复
可以么?帮你顶一下。也想知道的说
lsgt 2005-07-12
  • 打赏
  • 举报
回复
up一下
xqchang 2005-07-11
  • 打赏
  • 举报
回复
关注

2,640

社区成员

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

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