我正在尝试编写自己的更新源代码,以便从Web更新我的应用程序 基本上我使用两个INI文件。一个在网上,一个在客户端。客户端将当前版本号和URL保存到服务器端ini。服务器端ini保存最新版本和新下载的URL。
无论如何,一切似乎都很有效。文件下载很好,但我想知道如何关闭当前应用程序以运行新下载的文件(安装程序)
答案 0 :(得分:6)
为什么不简单地运行更新程序并立即关闭当前应用程序?
ShellExecute(nil, nil, PathToUpdater, nil, nil, SW_SHOWNORMAL);
Application.Terminate; // Or some other way
当然,更新程序并不介意原始进程在其生命周期中存在几毫秒?
答案 1 :(得分:4)
正常程序是这样的:
这样做的主要好处是不会强迫用户等待下载。一个可能需要时间并可能失败的过程。从而为用户提供尽可能少的停机时间。
有一个棘手的场景需要处理。那是程序启动更新程序然后自行关闭的时候。如果主进程在更新打开可执行文件之前未关闭,则更新程序可能会失败。处理此问题的最优雅方法是主程序将其PID传递给更新程序。然后,更新程序可以打开该进程的句柄并等待它发出信号。
另一种非常相似的方法是这样的:
说实话,第二种方法似乎对我更有吸引力。它有更好的关注点分离。主要计划涉及其业务。更新程序关注其工作。显然,他们之间必须有互动和合作,但这是最低限度的。