使用.NET/C#app自动更新的免费解决方案?

unr*_*ity 41 .net c# auto-update

从搜索中我可以看到这已经被一次又一次地询问,但还不够充分,所以这里也是如此.我是一个没有预算的业余爱好者.我一直在开发的程序一直需要定期的错误修正,而我和用户已经厌倦了必须手动更新.

我,因为我现在的更新通过FTP和我的下载链接的文本文件在网站上,然后希望用户将看到"有一个更新消息",终于让他们的解决方案,然后懒得手动下载更新,以及坦率地说,是非常糟糕的.

用户,因为,"你有没有实现自动更新?" "会不会有自动更新功能?" 如果我碰巧搞砸了更新过程,干草叉开始到来.

过去我曾调查过:

  • WinSparkle - 没有应用内更新,DLL为500 KB.我当前的解决方案是可执行文件中的几KB,并且没有应用内更新.
  • .NET应用程序更新组件 - 不幸的是我无法理解文档.
  • Eduardo Olivera的AutoUpdate - 除了使用未使用的文件之外,它似乎不支持任何其他内容.
  • wyUpdate - wyBuild不是免费的,虽然wyUpdate规范可用,但它过于复杂和耗时.
  • AppLife更新 - 同上最后一句话.
  • ClickOnce - 在启动时实现启动的变通办法是巨大的,可怕的,并且不值得这么简单的功能.出版是一种痛苦; 没有FrontPage Extensions的服务器需要手动FTP和替换所有文件.

令人非常失望的是,当您为Mac OS X提供非常好的简单实现(如Sparkle)时,Windows的情况就是这样.

Cam*_*tin 19

自己实施!这会很有趣的.创建一个仅包含更新逻辑的单独应用程序,即在线获取文件,下载文件,替换本地文件,并以可视方式向用户显示.

因此,您的主应用程序可以检查更新,如果它们存在,它将提示用户更新的可能性.如果用户想要,它将运行更新程序,关闭自己(因此可以进行更新)和presto.

您需要的唯一东西可以在C#,FTP访问和IO中轻松获得.

编辑:我知道这不是一件非常简单的事情,但这是一个完美的学习机会:

  • 如何(正确)下载文件,以抽象的方式,可以扩展到ftp,http等.
  • 如何(正确地)对许多文件执行简单任务 - 复制或覆盖它们(这意味着错误处理).
  • 练习(因为没有"正确的"方式)来分层和封装一个软件.
  • 如何处理OS /其他软件(防病毒/防火墙/等)不合作.

这些都是我们都需要了解的所有内容 - 如果需要几周时间来编写更新程序,则意味着您需要几周的学习时间.如果你不需要学习,有时间磨练你的技能!如果您不知道是否需要,请及时查询!:)

注意:我知道我确实需要学习更好的文件和网络I/O.

  • 我已经构建了这样一个库,听起来很简单,但很快发现它不是,特别是如果你想构建一些更强大的功能,比如拥有不同的源(磁盘,网络,网络),不同的补丁机制(完整的,三角洲等),可恢复的下载,在xp,vista,win 7等各种安全模型中工作.我不是试图阻止你自己滚动,但也不要把它作为一个微不足道的任务写下来. (31认同)
  • 自己编写一个*good*auto-updater可能需要比调整wyupdate或为其编写更新生成器更长的时间.我为我的一个项目写了一个坏的,我不会再这样做了.有很多错误.特别是vista +的安全性和填充物使得纠正它变得很痛苦. (3认同)
  • 但是,如果在实施家庭酿造机制之后,如果它简单,有趣并且有些通用,那么为什么这些努力在很大程度上是不成功的(即问题中注明的软件列表)?我认为当你进入它时可能会有更多细节,特别是考虑到你的更新需要通过防火墙,安全和AV软件等提供给不同的平台.我可以预见很多边缘情况. (2认同)

unr*_*ity 7

应该在几年前更新,哎呀!

但无论如何,我一直在使用SparkleDotNET一段时间,而且它的工作非常出色.这里和那里有一些小错误,但我已经帮助他们中的一些被压扁了,希望我也能够摆脱其他人:)

对于那些有时间运行Visual Studio的发布功能,并且其应用程序相对独立,并且不需要启动时启动的人,我肯定会推荐ClickOnce.MetroTwit使用它,它有一个很好的应用程序内更新程序界面,所以它似乎很灵活(至少在某种程度上).对于在启动时启动,可以这样做,但是这样做的方法非常黑,而且效果不好.

  • 除非我缺少任何东西,否则SparkleDotNet似乎被遗弃了。最后更新是2011年:( (2认同)