对于程序员和软件开发者来说,如何分发应用程序的新版本是一个常见问题。存在多种解决方案,例如微软的 ClickOnce,它直接集成在 Visual Studio 中,或者可以自己编写类似的工具。ClickOnce 的优点是简单且经过充分测试,完全集成到 Visual Studio 中。然而,ClickOnce 的简单性也是它的弱点,它不适合大型项目,原因有多个:无法控制应用程序的安装位置,无法从 FTP 服务器更新,发布速度不是最快的。
因此,一些程序员选择编写自己的更新器,尤其是当他们不想为付费工具(如 wyBuild、AppLife Update Engine)付费时。这促使创建了 HiUpdateTools,它结合了 ClickOnce 的优点(与 Visual Studio 集成、差异更新等),同时让程序员完全掌控一切。
HiUpdateTools 插件集成到 Visual Studio 中,允许直接从 Visual Studio 管理并发布新版本。支持 WinForms、WPF、WebApplication 等多种项目类型(WebApplication 正在准备中)。支持通过 FTP、文件等多种方式发布。在发送之前,每个文件都会被压缩,以减少传输数据量。文件被单独存储在目标位置,以便只下载新文件。可以检查服务器上存在的版本,并为每个发布的版本附加更改信息。支持自动构建为 Release 模式并在 AssemblyInfo.cs 中更改版本。可以选择构建哪些项目以及更新哪些版本。
HiUpdateTools.Client 客户端可以从多个源(FTP、文件、HTTP、HTTPS)下载。支持 WinForm 和 WPF 客户端。易于集成到应用程序中。可以启用自动更新(无需确认)。支持差异更新(只下载更改的文件)。应用程序通过 exe 文件运行(没有 UpdateAndRunApplication.exe)。检查应用程序的多次启动。在客户端配置文件中存储加密的密码。
安装 VSX 插件到 Visual Studio 后,会出现一个新的按钮,用于调用对话框设置和发布应用程序。在这里,可以设置应用程序名称、应用程序类型、版本。还可以设置应用程序应该发布的服务器位置。在客户端配置选项卡中,可以准备并导出应用程序的 XML 配置。设置完成后,可以通过点击部署按钮首次发布应用程序。在目标位置,应该有类似 ServerConfig.Xml 文件,其中存储了当前版本的信息,包括包含的文件。在各个子文件夹中,存储了每个版本的压缩文件。
将 HiUpdateTools.Client.Win.exe 和 ClientConfig.Xml 添加到应用程序引用中,然后在 Program.cs 类中添加一个静态属性。例如,在 C# 中,可以这样写:
public static string[] Args {
get;
set;
}
然后在 Main 方法中填充这个属性:
[STAThread]
static void Main(string[] args) {
Args = args;
Application.Run(new MainForm());
}
完成这些步骤后,只需捕获 MainForm 的 Load 事件并添加以下代码:
if (!Program.Args.Contains("/noupdate")) {
using (UpdateChecker checker = new UpdateChecker("ClientConfig.xml", typeof(Program).Assembly.GetName().Version)) {
if (checker.Check()) {
checker.RunUpdate();
Application.Exit();
return;
}
}
}
这样,当运行应用程序并在服务器上找到新版本时,应用程序将被终止,HiUpdateTools.Client.Win.exe 应用程序和更新操作将被启动(如果设置了自动更新)或者可以通过点击更新按钮来启动。