';缓存';'的行为;热修复';DLL

';缓存';'的行为;热修复';DLL,dll,caching,windows-xp,Dll,Caching,Windows Xp,有时,客户(或测试人员)需要在我使用的产品的安装上安装补丁。有时,我会为他编写一个包含修复程序的dll,以便他可以测试它。他用新版本覆盖旧dll并重新启动应用程序 时不时地,“新”dll似乎没有实际使用,尽管我绝对肯定我的全新闪亮字节是在旧dll上复制的 更糟糕的是,在第一次“热修复”运行之后,当重新启动应用程序时,新功能显然已加载…,旧的行为再也看不到了 有人注意到这种行为吗?XP加载器是否可能是最近使用DLL的“缓存” (注意:这发生在XP SP2上)是的,这是可能的。Windows不允许您

有时,客户(或测试人员)需要在我使用的产品的安装上安装补丁。有时,我会为他编写一个包含修复程序的dll,以便他可以测试它。他用新版本覆盖旧dll并重新启动应用程序

时不时地,“新”dll似乎没有实际使用,尽管我绝对肯定我的全新闪亮字节是在旧dll上复制的

更糟糕的是,在第一次“热修复”运行之后,当重新启动应用程序时,新功能显然已加载…,旧的行为再也看不到了

有人注意到这种行为吗?XP加载器是否可能是最近使用DLL的“缓存”


(注意:这发生在XP SP2上)

是的,这是可能的。Windows不允许您删除正在使用的文件,但奇怪的是(至少对于Windows而言),您可以在DLL仍在使用时重命名它。如果你的测试人员使用了一些东西

  • 将dll重命名为dll.orig
  • 复制新dll
  • 重新启动应用程序
如果dll.orig版本尚未完全卸载,则仍会使用该版本(因为某些仍在启动的应用程序仍有对其的引用)

这也咬了我几次。因此,我通常会更改一些行为(主要是日志文件头的某些行为),以便确保没有发生任何事情


解决方法很简单:关闭所有使用此DLL的程序。Sysinternals Process Explorer可帮助查找使用它的应用程序。

谢谢!这种行为在什么地方有记录吗?也许有,但我不知道。这个知识是通过实验得到的。不过,如果有人能找到这方面的确切来源,我也会感兴趣。