用.NET / C#应用程序自动更新的免费解决scheme?
从search中我可以看到这已经被一次又一次地提出,但是还不够充分,所以在这里。 我是一个没有预算的业余爱好者。 我一直在开发的程序一直需要定期修正错误,我和用户已经厌倦了手动更新。
我,因为我目前通过FTP更新文本文件的解决scheme和我网站上的下载链接,然后希望用户会看到“有更新的消息”,最后让他们感到困扰,手动下载更新,好坦率地说,是非常糟糕的。
用户,因为,“你打算实施自动更新吗?” “会不会有自动更新function? 如果我碰巧搞砸了更新过程,干草叉开始到达。
过去我曾看过:
- WinSparkle – 没有应用程序内更新,并且该DLL是500 KB。 我目前的解决scheme是可执行文件中的几个KB,没有应用程序内更新。
- .NET应用程序更新组件 – 不幸的是我不能理解文档。
- Eduardo Olivera的自动更新 – 除了处理未使用的文件之外,这似乎不支持任何其他function。
- wyUpdate – wyBuild不是免费的,虽然wyUpdate规范是可用的,但它通过太复杂和耗时。
- AppLife更新 – 同上最后一句。
- ClickOnce – 在启动时执行启动的解决方法是巨大的,可怕的,不值得这样一个简单的function。 出版是一种痛苦; 手动FTP和所有文件的replace是不需要FrontPage扩展的服务器。
如果你已经有了像Sparkle这样的Mac OS X的非常好的和简单的实现,那么Windows的情况就是这样的。
自己实现! 应该会很好玩。 创build一个单独的应用程序,只包含更新逻辑,即在线获取文件,下载文件,replace本地文件,并以可视方式向用户显示。
所以你的主应用程序可以检查更新,如果存在,它会提示用户更新的可能性。 如果用户想要,它会运行更新程序,closures自己(所以更新可能发生)和presto。
在C#,FTP访问和IO中,唯一需要的东西就是可用的。
编辑:我知道这不是非常容易,但这是一个完美的机会学习:
- 如何(正确)下载文件,以抽象的方式,可以扩展到FTP,HTTP等
- 如何(正确)对许多文件执行简单的任务 – 复制或覆盖它们(这意味着error handling)。
- 实践(因为没有“正确”的方式)来分层和封装一个软件。
- 如何处理操作系统/其他软件(防病毒/防火墙/等)不合作。
这些都是我们都需要很好地了解的事情 – 如果需要几周的时间来编写更新程序,这意味着您需要几周的学习时间。 如果你不需要学习,有时间磨练你的技能! 如果你不知道你是否需要,有时间找出来! 🙂
注意:我知道我需要学习更好的文件和networkingI / O
应该更新了这个年代以前,哎呀!
但无论如何,我一直在使用SparkleDotNET一段时间,它已经非常奇妙地工作。 这里有几个小虫子,但是我已经帮他们把他们中的一些压扁了,希望我能够摆脱其他的:)
对于那些有时间运行Visual Studio的发布function的人来说,他们的应用程序相对独立,并且不需要像在启动时启动的任何东西,我一定会推荐ClickOnce。 MetroTwit使用它,它有一个不错的应用程序更新界面,所以它似乎很灵活(至less在一定程度上)。 对于在启动时启动, 可以这样做,但是这样做的方法是相当黑客,并不能很好地工作。
你可以尝试从codeplex的 Autoupdater.NET我开发它我自己,它在我的应用程序工作得很好。 你只需要在代码中添加一行,并完成。 它也是开源的,所以你可以修改和使用,只要你想。
你甚至不能开发一个外部应用程序,而是把它作为你的应用程序的模块来实现,例如在namespace Update
,使用dynamic程序集生成器生成一个exe文件,启动它并退出app main,当更新完成时再次启动它。
一些更多的信息 。
还有DDay更新是开放源代码,并由我的一个客户使用。 我们/他们主要是在windows服务的情况下对它感兴趣,在这方面合理的工作。
所有的人都是对的,特别是看看abatishchev的答复。但我想其他一些需要的人忘了它。 尝试开发你的项目“模块化”。把他们的代码放在类库中,你可以在修复操作中replace其中的一个。想象一下回合数据库的修复。有些时候你需要添加一个列到数据库表中。你做这些事情吗?
一个已经开发了一个更新项目。我有三种修复方法。 1-程序运行中的BUG,需要更换DDL文件2-程序中的错误,需要更新当前程序执行文件3-错误或更改数据库,需要执行sql server查询
在networking主机上的表格,我把版本的历史logging,每当我的应用程序开始检查新版本。如果有任何更新存在检查其types并下载它,做适当的行动取决于更新types和参数
祝你好运