通过搜索我可以看到这个问题已经被多次询问过,但还不够充分,所以就来吧。我是一个没有预算的业余开发者。我一直在开发的一个程序需要定期修复错误,而我和用户已经厌倦了手动更新。
我,因为我目前的解决方案是通过 FTP 和网站上的下载链接更新文本文件,然后希望用户会看到“有更新消息”,最后让他们手动下载坦率地说,更新很糟糕。
用户,因为,嗯,“你打算实现自动更新吗?” “会有自动更新功能吗?”如果我碰巧搞砸了更新过程,干草叉就会开始到来。
过去我研究过:
- WinSparkle - 无应用内更新,DLL 为 500 KB。我当前的解决方案是可执行文件中有几个 KB,并且没有应用内更新。
- .NET Application Update Component - 很遗憾,我无法理解文档。
- Eduardo Olivera's AutoUpdate - 除了处理未使用的文件外,这似乎不支持任何其他内容。
- wyUpdate - wyBuild 不是免费的,虽然可以使用 wyUpdate 规范,但它太复杂且耗时,无法完成。
- AppLife Update - 同上最后一句话。
- ClickOnce - 实现启动时启动的变通办法是巨大的、可怕的,不值得为这样一个简单的功能付出代价。出版是一种痛苦;没有 FrontPage Extensions 的服务器需要手动 FTP 和替换所有文件。
很令人失望的是,Windows 上的情况是这样的,而您已经为 Mac OS X 实现了非常好的和简单的实现,例如 Sparkle .
最佳答案
自己动手吧!应该会很好玩。创建一个仅包含更新逻辑的单独应用程序,即在线获取文件、下载它们、替换本地文件,并以可视化方式向用户显示。
因此您的主应用程序可以检查更新,如果存在更新,它会提示用户是否可以更新。如果用户愿意,它会运行更新程序,关闭自身(以便更新可以发生)并很快。
您需要的唯一东西在 C#、FTP 访问和 IO 中很容易获得。
编辑:我知道这不是一件容易的事,但这是学习的绝好机会:
- 如何(正确地)下载文件,以一种可以扩展到 ftp、http 等的抽象方式。
- 如何(正确地)对许多文件执行简单任务 - 复制或覆盖它们(这意味着错误处理)。
- 练习(因为没有“正确”的方法)对软件进行分层和封装。
- 如何处理操作系统/其他软件(防病毒/防火墙/等)不合作。
这些都是我们都需要了解的 - 如果编写一个更新程序需要几周的时间,这意味着您需要几周的时间来学习。如果你不需要学习,是时候磨练你的技能了!如果你不知道你是否需要,是时候找出来了! :)
注意:我知道我确实需要学习更好的文件和网络 I/O
关于c# - 使用 .NET/C# 应用程序自动更新的免费解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4524147/