我一直在考虑为我的Delphi应用程序编写自己的代码,以实现平滑更新,因为我将采用“尽早发布,经常发布”的方法。目前市面上有各种免费和付费的Delphi解决方案,想问一下您是否使用过其中任何一个,或者只是采用自己的解决方案?对于自动更新主题的任何评论都欢迎。
我一直在考虑为我的Delphi应用程序编写自己的代码,以实现平滑更新,因为我将采用“尽早发布,经常发布”的方法。目前市面上有各种免费和付费的Delphi解决方案,想问一下您是否使用过其中任何一个,或者只是采用自己的解决方案?对于自动更新主题的任何评论都欢迎。
多年前我写了一个简单的工具,这个工具启动代替真正的程序,检查更新,加载并安装它们(如果有可用的更新),最后启动真正的应用程序。
然而,在一个被正确管理的环境下运行的程序中存在问题,其中用户通常没有对程序目录的写访问权限。在这种环境下,您不能再简单地更新自己的程序。这就是为什么现在很多程序都带有自己的更新程序,可以安装以使用提升的权限运行,以便即使只有标准用户登录到系统,也可以应用程序更新。
您必须决定您的目标受众是否可以假定在运行强大的用户或管理员帐户,或者您是否将不得不处理上述问题。随着Vista的到来,事情已经变得更加困难了。
由于所有这些问题(通过代理进行网络访问,缺少安装目录的写权限,需要更新更新程序本身正在使用的文件等等),我不会再尝试自己编程。最好检查是否有任何可用的解决方案可以满足您的所有需求。
编辑:链接已更新
我基于Indy创建了自己的解决方案用于下载和文件补丁,使用了http://sourceforge.net/projects/makeupdate/。在此之前,我尝试过几种商业工具,但都不能完全符合我的需求。
主应用程序启动时,会使用 synapse 库中的函数检查是否有可用更新(当然前提是已经配置好检查)。
如果有更新,它会通知用户并询问是否要更新。
如果用户同意,它将启动一个更新程序 .exe,并关闭主应用程序。
更新 exe 根据检索到的文本文件中的内容下载新文件,并将文件存储在内存中。
当更新程序正确下载完所有文件后,它会将下载的文件保存到磁盘中,并备份替换的任何文件。这样,如果下载被中断,你就不会只安装一半的文件。
最后,它会再次启动主应用程序,并关闭自身。
Configure your setup to change permissions of the programs installation directory. This way files in "C:\Program Files (x86)\Your Company\You App" can be modified on Accounts with limited rights.
Example code for InnoSetup would be:
[Dirs]
Name: "{app}"; Permissions: users-modify
Install files that you plan to update to the ProgramData folder instead of the user defined directory and use this directory as an override folder. If files exist in ProgramData, use those, else check in install dir.
InnoSetup code:
[Files]
Source: "C:\Your Project\YourApp.exe"; DestDir: "{commonappdata}\Company Name\App Name\";
通常我们使用第三方工具。但在某些情况下它无法使用,所以我创建了自己的解决方案,这是相当标准的:
和“stg”以及“GuyWithDogs”一样,我也在使用TMS的TWebUpdate。虽然文档不是很好,但学习起来并不难。
使用TWebUpdate,你可以选择使用HTTP、FTP或网络访问协议。
TWebUpdate使用WinInet作为通信层。在某些机器上,Windows/IE URL缓存可能会令人沮丧,因此我添加了一个例程,首先清除自动更新服务器地址的缓存,以确保从服务器收集的信息是最新的。