我可以安全地重命名/移动已由进程加载的dll吗?

时间:2010-11-02 02:19:07

标签: windows dll

我有一个由进程加载并被文件锁定的dll,我想用更新的版本更新它。我正在寻找一种替代方法来终止进程以在更新dll之前释放文件锁。现有的实时进程仍然可以使用旧版本,只要新实例化的进程能够获取新逻辑。

似乎我可以简单地重命名/移动dll,而且实时进程似乎仍然运行良好。这样做安全吗?如果dll的代码已经加载到进程中,为什么它仍然需要锁定dll?

2 个答案:

答案 0 :(得分:3)

移动任何随机应用程序使用的所有dll并不总是可以的。某些应用程序,如asp.net,使用卷影复制概念,它们实际上复制dll并使用副本,让您可以自由地修改原件。在asp.net的情况下,如果你修改原来的asp.net将使用新的dll自动整理一个新的应用程序域,并优雅地关闭旧的。

如果您所指的应用程序锁定了该DLL,则无法安全地更改它。

答案 1 :(得分:1)

这取决于你的dll /应用程序。例如,dll可以使用共享内存,或实现进程间通信。新的DLL版本可能会以不同的方式实现它。因此,一旦新实例启动,您将在内存中有两个冲突的版本。 因此,在一般情况下它并不安全,但在您的特定情况下可能没问题。