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

时间:2010-12-24 04:10:04

标签: c# .net auto-update

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

我,因为我目前通过FTP更新文本文件的解决方案和我在网站上的下载链接,然后希望用户会看到“有更新消息”,最后让他们去打扰手动下载坦率地说,更新是非常糟糕的。

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

过去我曾调查过:

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

令人非常失望的是,当您为Mac OS X提供非常好用且简单的Sparkle实施时,Windows的情况就是这样。

7 个答案:

答案 0 :(得分:19)

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

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

您需要的唯一内容可以在C#,FTP访问和IO中轻松获得。

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

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

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

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

答案 1 :(得分:7)

应该在很久以前更新过,哎呀!

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

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

答案 2 :(得分:3)

你可以试试codeplex的Autoupdater.NET我自己开发它,它在我的应用程序中运行得很好。您只需在代码中添加一行即可完成。它也是开源的,因此您可以根据需要进行修改和使用。

答案 3 :(得分:1)

您甚至无法开发外部应用程序,但可以将其作为应用程序的模块实现,例如:进入namespace Update,并使用动态程序集构建器生成exe,启动它并退出app main,在更新完成后再次启动它。

更多info

答案 4 :(得分:1)

还有DDay update是开源的,我的一个客户使用它。我们/他们主要对Windows服务的上下文感兴趣,因为它的工作原理相当不错。

答案 5 :(得分:0)

有关更强大的解决方案,您可能需要查看Google Omaha。这就是Chrome的用途。当您的应用程序不运行时,您可以在后台获取应用程序内更新和自动更新。

答案 6 :(得分:-1)

所有人都是对的,特别是看看abatishchev的回复。但我觉得有些东西需要那个人忘了它。尝试开发你的项目“模块化”。尽可能在类库中输入你的代码。所以在修复操作期间替换其中一个。想一个bout数据库fix.some时你需要在数据库表中添加一个列。你是否为这些案件做过?

已经开发了一个更新项目。我有三种修复方法。 1-程序操作中的BUG并需要替换DDL文件 2-程序中的Bug,需要更新当前程序执行文件 3- bug或更改数据库并需要执行sql server查询

在网络主机上的表格中我放置了版本历史记录,每次我的应用程序开始检查新版本。如果存在任何更新,请检查其类型并下载并根据更新类型和参数执行合适的操作< / p> 好运老兄