这是在Windows XP上。
我有一个正在运行的进程(我想继续运行)。如果我复制它使用的dll(如在更新版本中替换它),这是否会导致正在运行的进程出现问题,或者代码是否已经加载以致无关紧要?
答案 0 :(得分:7)
您应该无法复制正在运行的进程正在使用的dll。为了替换dll,需要将其标记为删除并在下次重新启动时替换。如果您希望手动执行此操作,则需要停止该过程。
如果你可以复制它 - 那么dll就没有被你怀疑使用了,如果它是后期绑定的那么你可以在它上面复制它当进程没有主动将其锁定时 - 并且提供dll的内部对活动进程没有任何不利影响的时间,应该没问题。
当然,不知道有关dll的任何内容,也不了解所述dll开发中使用的内部或编程标准 - 我不能说出这样或那样的方式。
请注意,复制任何dll都可能对依赖它的应用程序产生负面影响,包括操作系统。
答案 1 :(得分:3)
行为始终是特定于流程的。有些进程采用卷影副本,有些进程锁定DLL,有些进程加载到内存并忘记文件系统,直到下次加载为止。
即使您可以写入DLL,该进程也不太可能在重新启动之前对更改作出反应。也许它会自动重启。 (运行ASP.NET应用程序的IIS就是一个例子)。你只需要尝试。
可能永远不可取。
答案 2 :(得分:1)
我相信DLL在使用时会保持打开状态,因此您将无法写入。
答案 3 :(得分:0)
一般来说,你应该避免这种做法。虽然它可能有用,但理论上,特别是如果你控制长时间运行的进程和DLL,并且可以保证没有其他人需要它,Windows真的不喜欢这样做。
我建议阅读Raymond Chen最近于2008年11月在Technet上发表的文章(“Windows Can but Won't”),了解更多信息,了解为什么这通常不是一个好习惯,顺便说一下,为什么经常需要从应用安装程序重新启动。