(Windows)如何使插件具有自动更新功能?

(Windows)如何使插件具有自动更新功能?,windows,dll,plugins,auto-update,Windows,Dll,Plugins,Auto Update,我有个问题。我正在为应用程序(.exe)编写插件(.dll)。我想为我的插件编写自动更新功能,但我发现了一个问题,它无法应用。因为我的插件是在应用程序运行时加载的,所以在运行时它无法替换。它仅在应用程序退出之前应用。那么,我该怎么做呢 这是我的代码: 谢谢 (这回答了原始问题,该问题已被编辑为完全不同的内容) 这取决于操作系统(我猜可能是Windows,因为您提到了DLL;在Linux上,您使用了不同的语义)。读莱文的书 你可能会读到更多关于。这是一个完整的研究课题,有很多关于它的科学文献。阅读

我有个问题。我正在为应用程序(.exe)编写插件(.dll)。我想为我的插件编写自动更新功能,但我发现了一个问题,它无法应用。因为我的插件是在应用程序运行时加载的,所以在运行时它无法替换。它仅在应用程序退出之前应用。那么,我该怎么做呢

这是我的代码:

谢谢

(这回答了原始问题,该问题已被编辑为完全不同的内容)

这取决于操作系统(我猜可能是Windows,因为您提到了DLL;在Linux上,您使用了不同的语义)。读莱文的书

你可能会读到更多关于。这是一个完整的研究课题,有很多关于它的科学文献。阅读例如关于的论文(至少要理解问题中的几个问题)

在Linux上,您可以使用旧的
.so
和新的
dlclose
旧的插件,但您应该稍后再这样做,因为旧插件上没有活动的调用框架),我的示例表明,您实际上可以
dlopen
大量(实际上超过一百万)共享对象

在Windows上(我不知道),您可能需要在不同的文件路径中安装新版本的插件。也许,在插件更新后重新启动程序会让事情变得更容易

(如果你能负担得起的话,切换到Linux可能会非常有帮助,因为我想这要容易得多)

注意,在某些语言(和一些实现)中替换一些代码比Windows上的C或C++更容易。我想在(例如C#)或a(例如Java、Scala、Clojure)中应该更容易。在(至少使用)中,它非常简单(特别是因为CommonLisp是一种语言)


处理调用堆栈,即调用堆栈。你会明白你的问题(也与正交&)比你想象的要深刻和困难得多。升级类及其实例也非常困难。

通过显示一些代码,并详细介绍您的程序和系统来改进您的问题。您应该将代码的相关部分放在问题中(每个源代码行前至少有四个空格),不在外面给链接。很抱歉,我想在Windows上做。在Windows上,在运行进程中加载时无法替换它。我知道这里有一个API:这个API有一个标志MOVEFILE\u DELAY\u UNTIL\u REBOOT,它将被替换,直到系统重新启动。但这不是一个好主意。我想在进程重新启动时替换它:(可能您想做一些在Windows上可能不可能完成的事情。是否尝试为DLL加载其他文件路径?您可能需要提出一个更好、更集中的问题,并在其中显示一些源代码。不要忘记正确标记您的问题(如果是Windows特定的问题,则标记与
Windows
)我认为这不是一件不可能的事情。我看到一些应用程序可以。它只能包含在插件文件夹中。所以我不能更改它的路径。正如我告诉你的,我不知道Windows,也从未使用过它(但我从1974年开始编写代码)。所以我帮不了你。你应该问一个更具体的问题,并展示一些代码(在另一个问题中)。如果特定于Windows,请使用Windows标记。但您应该阅读有关Kitsune的文章,它可读性强,带来了非常有趣的问题。我编辑了我的问题。谢谢您的回答,我很抱歉问了一个不清楚的问题。