有没有办法在Windows中创建可自行更新的可执行文件?

时间:2009-01-20 00:26:19

标签: windows

我想生成一个可以在加载之前进行更新验证的可执行文件,然后,如果有更新,我希望它替换它的文件然后重新加载。

我认为最好将“updater”exe分开,因为如果更新器必须更新怎么办?

我无法在网络中拥有共享文件夹。

4 个答案:

答案 0 :(得分:4)

可执行文件无法替换自己的文件,但它可以将新的Exe下载到同一目录中的已知位置或文件名,然后在退出时启动切换文件的进程,这样您就可以更新下一次运行的时间。

如果您考虑一下,无论如何这是一种更好的方法,因为您无法确定文件下载是否会完成。即使你可以,你真的想让用户等到下载完成吗?不......最好让下载在后台运行。

答案 1 :(得分:2)

https://stackoverflow.com/questions/264788/can-i-update-a-exe-that-is-running-closed

是的,您可以自己下载exefile。只需将正在运行的exe重命名为.bak,将新的exe下载为.exe,然后重新启动应用程序。

这里的关键是你不能在程序运行时下载新版本的旧版本,解决方法是你可以重命名正在运行的exe,然后下载新版本,其名称与之前运行的exe相同重命名发生。然后它只是验证下载的exe:s大小并重新启动程序,你就可以运行了!

答案 2 :(得分:1)

如果您正在使用.NET应用程序并且需要一些简单的东西。微软有click once deployment可以满足您的需求。在使用ClickOnce部署之前,我做了一个基本的更新程序。执行发生了,当程序启动时,它在后台线程上检查了新版本的文件。如果有可用的更新,它将在该后台线程上下载。如果更新是针对updater可执行文件,那么我会替换可执行文件。否则,我会通知用户已准备好安装更新。他们会保存他们的工作并单击更新按钮。这将运行updater可执行文件,它替换文件并重新启动程序。这很简单,但没有做好增量更新或版本很好。我还提供了一个回滚功能,以便保留被替换的文件,以防用户想要回滚到以前的版本。我没有保留版本的历史。相反,我认为最后一个版本是一个很好的版本。

答案 3 :(得分:0)

如果您使用的是.NET Framework,我强烈推荐ClickOnce。它可以设置为在每次执行时执行更新。

有几种方法可以让ClickOnce更新更新,可以这么说。这些天我会写一篇博文。我们的想法是让更新像正常一样运行,但是当您的应用程序启动时会显示更新已更改的对话框,然后重定向用户以再次下载并安装exe。发送关键命令可以自动完成该过程。