3

我想为我的应用程序添加一个非常简单的自动更新程序。我想从最简单的事情开始。

关于如何做到这一点的任何建议?对以下选项有任何改进(或替代方案)的建议吗?

这是我正在考虑的一种选择。

  1. 应用程序显示一个表格,提供检查新版本,并可选择每 X 天再次检查一次。
  2. 如果用户单击“立即检查”,则会启动一个网页 www.mysite.com/CheckNewVersion.asp?AppID=<>?AppVersion=<>
  3. ASP 脚本包含所有程序 ID 和当前可用版本的列表。然后,IT 会向他们显示“没有可用的新版本”或“具有 XYZ 功能/修复的新版本”的页面(以及“免费更新”或“在此付费”)。

这提供了自动更新 80% 的好处,而成本仅为 10%。如果没有人点击自动更新(我怀疑这是一种可能性,因为人们不想被打扰),那么让它变得更简单是没有意义的。没有办法让它变得如此简单,以至于他们不必至少单击“更新”按钮。

顺便说一句,我确实意识到在 SO 上有一个类似的问题,但没有讨论实现细节。它似乎更具理论性,旨在提供更复杂的解决方案。

4

2 回答 2

2

我的建议(在我自己构建了一些之后)是从一个稍微不同的系统开始。让您的应用程序通过查看服务器上的静态 XML 文件在内部运行检查,例如:/AppVersion_[AppID].xml 该 xml 文件仅描述当前的公共版本以及当前的构建/版本号,可能还有时间戳和完整路径到最新的二进制文件以及 MD5 校验和。这将减少一开始的大量工作和复杂性。

您的应用程序只需提取此 XML 文件并将文件中的版本信息与其当前版本进行比较。如果它较新,您可以弹出一个友好的对话框,要求用户升级。

如果用户确实想要升级,请从 XML 文件的路径中下载安装程序二进制文件,检查 MD5 校验和,然后使用 shell 执行启动它。这使用户不必下载您的文件,并确保文件下载没有任何问题。

我建议从 VB6 升级到 VB.NET,原因如下:

1) .NET BCL 中称为 WebClient 的神奇控件,它使获取 URL 的字符串内容就像单行调用一样简单。此外,WebClient 将在一次调用中将文件下载到指定的磁盘位置。

2) 内置的 XML 支持非常棒。

下面是一些基本的 VB.NET 代码,可帮助您开始下载并运行您的软件产品之一:

Dim TargetRemoteSetupFile As String = "http://www.bungalowsoftware.com/downloads.asp?programlist=/download/aphasia_tutor_1_and_2_outloud_install.exe"
Dim LocalDownloadPath As String = System.IO.Path.Combine(System.IO.Path.GetTempPath(), "BungalowSoftwareInstall.exe")

Dim FileDownloaderWebClient As New System.Net.WebClient()

Try
   FileDownloaderWebClient.DownloadFile(TargetRemoteSetupFile, LocalDownloadPath)
Catch ex As Exception
   System.Diagnostics.Debugger.Break()
   '...
Finally
   FileDownloaderWebClient.Dispose()
End Try

System.Diagnostics.Process.Start(LocalDownloadPath)
于 2009-05-13T14:55:28.780 回答
1

在 Mac OS X 中,Sparkle 框架在用于自动更新的应用程序中非常流行。它的工作原理有点像这样:

用户第一次启动应用程序时,它会询问是否自动检查更新(有时检查之间的间隔)。当用户说他们想检查更新时,应用程序通常会在启动时检查更新,但每天不超过一次。

在服务器上,有一个 XML 文件或脚本生成这样的文件,其中包含可用的软件版本以及每个版本的简短摘要或变更日志。当没有可用的更新时,应用程序什么也不做。根本不会通知用户。

当有可用更新时,应用程序会提示:“有可用更新”以及新版本号、更改日志和以下按钮:“更新”和“跳过此版本”。

当然,这些按钮是不言自明的。

于 2009-05-13T14:55:00.793 回答