自我更新

时间:2020-03-05 18:48:17  来源:igfitidea点击:

终止程序,然后从终止的程序中运行其他代码的最佳方法是什么?例如,程序自我更新的最佳方法是什么?

解决方案

回答

我不知道没有关闭主程序之前启动第二个程序的方法。程序2下载并安装所做的更改,然后重新启动主程序。

回答

我们在之前的应用中做了类似的事情。我们从X或者关闭按钮捕获了程序的终止(在.NET 2.0中),然后启动了用户看不到的后台更新过程。它将检查服务器(客户端-服务器应用程序)是否有更新,如果有可用的更新,它将使用BITS在后台下载。然后,下次应用程序打开时,它将意识到存在一个新版本(我们设置了一个标志),并弹出一条消息提醒用户该新版本,以及一个按钮,如果用户想查看所添加的新功能,请单击该按钮。到这个版本。

回答

我们有两种选择:

我们可以使用另一个应用程序.exe进行自动更新。这可能是最好的方法。

我们还可以在程序运行时重命名它的exe。因此,允许我们从某个更新服务器获取文件并替换它。在程序的下一次启动时,它将使用新的.exe。然后,我们可以在启动时删除重命名的文件。

回答

如果我们有运行该更新的辅助应用程序,则此操作会变得更加容易。我们将执行"更新程序"应用程序,然后在其内部等待其他进程退出。如果我们需要访问常规应用程序DLL等,但它们也需要更新,则可以从具有已更新DLL的辅助位置运行更新程序,以便不在原始位置使用它们。

回答

知道我们在这里谈论什么语言真的很有帮助。我敢肯定,我可以为我们提供一些在PowerBuilder或者Cobol中执行此操作的非常好的技巧,但这可能并不是我们真正想要的!但是,如果我们正在谈论Java,那么可以使用关闭挂钩对我来说非常有用。

回答

如果使用的是编写.NET应用程序,则可以考虑使用ClickOnce。如果我们需要大量的自定义,则可以在其他地方查找。

我们有一个外部程序为我们执行更新。找到更新后,将其下载到辅助文件夹,然后等待主应用程序退出。退出时,它将替换所有当前文件。主要过程只是每4小时启动一次更新过程。因为更新过程将等待主应用程序退出,所以主应用程序除了启动更新应用程序外无需执行任何特殊处理。

这是一个附带问题,但是如果我们正在考虑编写自己的更新过程,我建议我们考虑使用某种压缩方式,以(1)保存下载并(2)提供一个文件以从更新服务器中提取文件。

希望有道理!

回答

要考虑的另一件事是,我一直在使用的大多数"主要"应用程序(FileZilla,Paint.NET等),都让更新程序卸载了该应用程序的先前版本,然后重新安装了新版本的应用程序。

我知道这不适用于真正的大型应用程序,但是对于中小型应用程序,这似乎是"首选"过程。