使用 Amazon S3 托管 Squirrel.Windows 发布文件:从存储桶搭建到自动化更新分发

发布时间:2026/9/26 3:07:35
使用 Amazon S3 托管 Squirrel.Windows 发布文件:从存储桶搭建到自动化更新分发 开发工具【免费下载链接】Squirrel.WindowsAn installation and update framework for Windows desktop apps项目地址https://gitcode.com/gh_mirrors/sq/Squirrel.Windows点击查看免费下载Amazon S3 是托管 Squirrel.Windows 发布与更新文件最简单、最经济的方案之一把Releases目录中的Setup.exe、RELEASES与各版本 full/delta NuGet 包当作静态资源放入 S3 存储桶客户端即可通过 HTTPS 完成安装与静默更新。本文以 docs/using/amazon-s3.md 为主线结合仓库源码与配套文档完整讲解首次搭建 S3 分发链路、配置UpdateManager指向 S3 地址、以及每次发版时如何上传并公开新文件读完即可将 Squirrel.Windows 的安装/更新流程迁移到 AWS 上。S3 托管方案的整体思路Squirrel.Windows 的更新机制以「一个发布目录 一份清单文件」为核心Squirrel --releasify会生成Setup.exe安装引导程序、RELEASES所有发布包的 SHA1、文件名与大小清单以及按版本命名的MyApp.1.0.0-full.nupkg与增量MyApp.1.0.1-delta.nupkg具体输出可参见 Step 2. Packaging 的 Releasify Output 一节。客户端侧的UpdateManager只需知道这些文件所在的「位置」——它可以是本地目录、普通 HTTP 服务器、GitHub Releases也可以是 Amazon S3 的静态地址。S3 的优势在于无需自建服务器AWS 控制台即可完成建桶、上传、授权全部操作通过 HTTPS 提供服务天然满足桌面应用远程更新的传输需求与 GitHub Releases 分发通过 GitHub API 定位最新发布资源不同S3 是纯静态文件托管客户端直接按 URL 拼出RELEASES与各nupkg的下载地址逻辑更简单。从源码看UpdateManager的构造函数接收的正是这个「URL 或路径」参数src/Squirrel/UpdateManager.cs因此把本地Releases目录换成 S3 地址即可复用同一套更新逻辑。首次搭建准备 S3 存储桶按照原文档 Amazon S3 Setup 的步骤首次搭建需要完成以下操作注册 Amazon AWS 账号—— 如果还没有 AWS 账户先注册并登录 AWS Console。创建存储桶Create Bucket—— 新建一个专门存放应用更新文件的 bucket建议选择离目标用户较近的区域并让桶名与应用名相关例如myapp.bucket。配置 UpdateManager 的包位置—— 在 MyApp 的更新代码中把UpdateManager指向 S3 存储桶的Link地址即下载文件的地址不含具体文件名形如https://s3-us-west-2.amazonaws.com/myapp.bucket注意该地址是桶的访问根地址UpdateManager会在其后追加RELEASES与各包文件名详见下文「客户端如何从 S3 获取更新」一节。Build、Pack、Releasify—— 按 Step 2. Packaging 的流程完成应用构建、NuGet 打包与Squirrel --releasify发布生成Releases目录中的全套分发文件。上传文件Upload Files—— 将 SquirrelReleases目录中的文件全部上传到 S3 存储桶。设为公开Make Public—— 在 AWS 控制台选中上传的文件执行 Make Public 操作使客户端可以通过公开 URL 直接下载。配置 UpdateManager 指向 S3 地址基础更新代码在 MyApp 的Program.cs中将UpdateManager的构造参数从本地路径替换为 S3 地址即可参见 Step 1. Integrating 的 Basic Updating 一节using Squirrel; using System.Threading.Tasks; // 在 static async Task Main() 中 using (var mgr new UpdateManager(https://s3-us-west-2.amazonaws.com/myapp.bucket)) { await mgr.UpdateApp(); }这里有两个关键点需要特别注意传入的是目录地址而非文件地址UpdateManager的参数是存放RELEASES文件的目录或对应 URL 前缀不是RELEASES文件本身与本地路径写法C:\Projects\MyApp\Releases的语义完全一致。URL 不要以斜杠结尾从 src/Squirrel/UpdateManager.CheckForUpdates.cs 的实现可以看到当传入地址是 HTTP URL 时客户端会先去掉末尾的/再通过Utility.AppendPathToUri拼出RELEASES的完整下载地址。如果地址以/结尾拼接后会出现双斜杠或路径错位可能导致 404——这一点与 GitHubUpdateManager 的注意事项一致。用 --baseUrl 生成带 URL 前缀的 RELEASES 文件上传到 S3 的RELEASES清单既可以只包含文件名客户端在本地目录场景下使用也可以为每个条目直接内嵌完整 URL远程场景下使用。Squirrel.exe的--releasify命令提供了-b, --baseUrl选项专门用来给RELEASES文件中的包条目统一加上基础 URL 前缀见 Squirrel Command LineSquirrel --releasify MyApp.1.0.1.nupkg -b https://s3-us-west-2.amazonaws.com/myapp.bucket从 src/Squirrel/ReleaseEntry.cs 的解析逻辑可以印证这一机制ParseReleaseEntry支持条目中的文件名是「绝对 HTTP(S) URL」——解析时会自动把 URL 拆分为BaseUrl与Filename两部分保存。因此--baseUrl生成的文件形如E3F67244E4166A65310C816221A12685C83F8E6F https://s3-us-west-2.amazonaws.com/myapp.bucket/MyApp-1.0.0-full.nupkg 600725客户端解析后即知道每个包从哪个完整地址下载。如果未指定--baseUrl客户端则会用传入UpdateManager的 URL 前缀自行拼接文件名两种方式均可工作。构建、打包并生成发布文件Releasify每次向 S3 发布无论首次还是更新都要先走一遍 Squirrel.Windows 标准的三步流水线详见 Step 2. Packaging 与 Step 5. Updating更新版本号在Properties\AssemblyInfo.cs中设置AssemblyVersion与AssemblyFileVersion如1.0.0。切换到 Release 配置并构建确保最新改动进入待打包的程序集。创建 NuGet 包把bin\Release下应用运行所需的文件MyApp.exe、MyApp.exe.config、非标准 .NET DLL连同 Squirrel 运行时文件Squirrel.dll、Splat.dll、NuGet.Squirrel.dll等放入lib\net45目录按MyApp.1.0.0.nupkg命名保存。执行 ReleasifyPM Squirrel --releasify MyApp.1.0.0.nupkg--releasify会在Releases目录中产出Setup.exe—— 内含最新版本应用的安装引导程序供新用户安装RELEASES—— 所有发布包的清单文件供更新进程使用MyApp.x.y.z-full.nupkg—— 完整包MyApp.x.y.z-delta.nupkg—— 相对上一版本的增量包更新场景自动生成可大幅缩小下载体积。上传文件并设为公开将Releases目录中的全部文件上传到 S3 bucket并在 AWS 控制台执行Make Public使每个文件都能通过公开 URL 访问。首次发布上传全部文件Setup.exe、RELEASES、当前版本的 full 包。版本更新上传新版本对应的Setup.exe、RELEASES以及该版本的全部 full 与 delta 包原文档明确要求 Make sure to include the new Setup.exe and RELEASES file along with any full and delta files for the new version。关于 MIME 类型需要特别注意S3 与 IIS 类似对未知扩展名会拒绝提供文件。.nupkg本质是 zip 归档上传后应确保其 Content-Type 为application/zipRELEASES为纯文本——否则客户端下载nupkg时会收到错误响应。IIS 场景的完整Web.config配置可参考 Hosting on IIS其中.nupkg → application/zip的映射同样适用于 S3 的对象元数据设置。发布新版本更新原文档 Amazon S3 Updates 给出更新分发只需三步与首次搭建的后半段完全一致Build、Pack、Releasify—— 按上文流程用新版本包如MyApp.1.0.1.nupkg重新执行Squirrel --releasifyReleases目录会更新Setup.exe并在RELEASES末尾追加新版本的 full 与 delta 条目RELEASES条目包含每行「SHA1 文件名 大小」参见 Step 5. Updating。上传文件—— 把Releases目录中新增/变更的文件上传到 S3 bucket。务必包含新的Setup.exe、RELEASES以及新版本的全部 full 与 delta 包不要只传增量包否则无法覆盖从旧版本升级与全新安装两类场景。Make Public—— 在 AWS 控制台选中新上传的文件并执行 Make Public。完成这三步后已安装用户的客户端下次启动时即可发现并应用新版本。客户端如何从 S3 获取更新当UpdateManager的地址是 HTTP(S) URL 时客户端更新流程参见 Update Process 与 Update Manager Reference如下CheckForUpdate从{baseUrl}/RELEASES下载远程清单。从 src/Squirrel/UpdateManager.CheckForUpdates.cs 的实现看客户端会先去掉 URL 末尾的/再AppendPathToUri拼出RELEASES地址并下载如果已知本地版本还会附带id、localVersion、arch等查询参数S3 静态托管会忽略这些查询串不影响下载。解析清单并决定要下载的包ReleaseEntry.ParseReleaseFileAndApplyStaging逐行解析远程RELEASESsrc/Squirrel/ReleaseEntry.cs结合本地已装版本选出需要下载的 full 或 delta 包。DownloadReleases从{baseUrl}/{文件名}或RELEASES条目中内嵌的完整 URL下载这些nupkg。ApplyReleases解包、更新快捷方式、清理旧版本完成升级对应UpdateApp()一站式方法。网络层面需注意由于 2018 年起主流云存储与 CDN 均已强制要求 TLS 1.2宿主应用应面向 .NET Framework 4.6.1 构建否则默认协商到 TLS 1.1 会导致CheckForUpdate失败——这一要求与 Using GitHub 文档中的说明一致对所有 HTTPS 更新源含 S3普遍适用。常见问题与最佳实践地址格式UpdateManager中填写的 S3 地址为「桶的访问根地址 不含文件名」形如https://s3-us-west-2.amazonaws.com/myapp.bucket不同 AWS 区域的端点域名不同以控制台给出的桶 Link 为准。尾部斜杠URL 不要以/结尾避免RELEASES拼接出错。文件完整性每次发版都要把Setup.exe、RELEASES与全部 full/delta 包一并上传并设为公开漏传RELEASES或旧包会导致客户端无法计算增量更新路径。权限与 MIME所有对象必须公开可读.nupkg的 Content-Type 应设为application/zipRELEASES保持text/plain。更新包大小充分利用--releasify自动生成的 delta 包客户端在 src/Squirrel/UpdateManager.CheckForUpdates.cs 的determineUpdateInfo中会优先选择增量包显著降低每次更新的下载流量与 S3 传输成本。按照以上步骤S3 即可成为 Squirrel.Windows 应用的长期更新分发通道。若需要比较其他托管方式可继续阅读 Using GitHub、Hosting on Microsoft IIS 与 Squirrel Command Line。赞分享开发工具【免费下载链接】Squirrel.WindowsAn installation and update framework for Windows desktop apps项目地址https://gitcode.com/gh_mirrors/sq/Squirrel.Windows点击查看免费下载相关推荐ReadCat API参考手册开发者必备的完整接口文档ReadCat API参考手册开发者必备的完整接口文档 欢迎来到 ReadCat API参考手册 作为一款免费、开源、简洁、纯净、无广告的小说阅读器Rea桌面应用前端Zero-shot GCN可视化分析t-SNE图揭示语义空间到视觉空间的映射Zero shot GCN可视化分析t SNE图揭示语义空间到视觉空间的映射 Zero shot GCNGraph Convolutional Networ使用 Boto3 将 Amazon S3 桶配置为静态网站托管使用 Boto3 将 Amazon S3 桶配置为静态网站托管 导读 Amazon S3 桶本身是对象存储但通过配置网站托管Website Hosting后端云原生上一篇OneUptime 自托管 SendGrid 入站邮件集成指南Incoming Email Monitor 完整配置与排障下一篇ERPNext 一键自动安装完整指南从零部署到生产环境创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考