自动更新.NET的库?
在Mac上,有一个名为Sparkle的非常好的库,程序可以使用它来实现自动更新的检查/安装function。
有没有什么类似的.NET? 还是只是普通的Win32?
ClickOnce有其自身的安全限制(可以这么理解)。 如果您想要Windows应用程序的全部function和控制权,请使用.NET 应用程序更新程序组件。 它就像一个魅力,甚至已经被微软内部用于他们的基于.NET的游戏(虽然我不记得游戏名称)。
首先让我们说我们提供了一个完整的更新解决scheme,其中包括:
- 用C#编写的开源更新程序wyUpdate ,
- 免费的AutomaticUpdater控件 ,你可以添加到你的.NET应用程序的forms
- wyBuild被用来构build补丁和pipe理你的版本
wyUpdate可以处理所有的Vista / Windows 7 UAC问题,以及在尝试更新复杂软件时不可避免地popup的所有文件权限问题。
这就是说,如果你想build立自己的更新这里有一些提示:
build立你自己的更新
一个好的开始是我上面提到的wyUpdate C#源代码 。 您可以拆分它并将其用于您自己的目的。 它包含的一些algorithm:
- 完整的Windows Vista / Windows 7 UAC支持
- 有限的用户能够检查,然后更新,如果他们有凭据
- 支持wonky企业inernet。 (如果你曾经与一家公司合作,这是一个真正的问题)。
- 快速提取,修补和安装文件。
- registry支持。
- 回滚文件和registry错误或用户取消
- 自我更新(没有文件留下)
我们也有这里的文件规格 。
自动更新
由于自动化是一个要求,让我告诉你如何用我们的AutomaticUpdater控制 。
我们使用命名pipe道在独立更新程序(wyUpdate)和位于程序窗体上的自动更新程序控件之间进行通信。 wyUpdate报告自动更新程序的进度,自动更新程序可以告诉wyUpdate取消进度,开始下载,开始提取等。
这使更新程序与应用程序分离。
事实上,我们使用的确切的命名pipe道C#代码包含在我刚才写的一篇文章中: 多进程的C#应用程序,如Google Chrome 。
ClickOnce是我的首选方法。 它有一些疣,但它与Visual Studio来,工作相当好。
ClickOnce被大量使用,但你可以做我为一个大型应用程序做的,并尝试这些:
-
在VB.NET中的应用程序自动更新
-
应用程序自动更新重访
我修改了一下逻辑,并构build了我认为是更好的XML更新文件。 现在,当我需要更新客户端,我只是发布新的EXE文件或DLL文件,并在公共XML文件中设置正确的版本。 我的应用程序检测到较新的版本,如果它较旧,并自行更新。 如果您在Windows Vista上执行此操作,则需要提示inputpipe理员权限,以便可以将程序文件写入(如果在此处安装)。
您也可以使用C#/ VB.NET Converter轻松将其转换为C#。
我刚刚经历了这个过程,并使用NetSparkle 。
它的工作方式与使用MSI安装程序覆盖以前版本的Windows窗体应用程序一样。 我很高兴我也find了 – 我即将推出自己的产品。 我是唯一一个真正简单的.NET应用程序吗? 我所看到的大部分内容似乎都是一种彻底的矫枉过正。
我还没有尝试NetSparkle(我将在以后),但它似乎是你在找什么。
NetSparkle是一个易于使用的软件更新框架,适用于Windows,Mac或Linux上的.NET开发人员。 它受到Cocoa开发人员的Sparkle项目和WinSparkle项目( Win32端口)的启发 。
我觉得WyBuild是很好的Sparkle替代品)
下面是我写的一个开源解决scheme,以解决我们对WinForms和WPF应用程序的特定需求。 总的想法是在尽可能最低的开销下具有最大的灵活性。
所以, 集成是非常容易的,图书馆几乎为你做了一切,包括同步操作。 它也非常灵活 ,可以决定要执行哪些任务以及在什么条件下 – 制定规则(或者使用已经存在的规则)。 最后但并非最不重要的是对任何更新源 (网页,BitTorrent等)和任何提要格式的支持 – 任何不执行,你只能自己写。
冷更新(需要重新启动应用程序)也被支持,并自动完成,除非为任务指定了“热插拔”。
这归结为一个DLL,小于70kb的大小。
更多详情, 请参阅http://www.code972.com/blog/2010/08/nappupdate-application-auto-update-framework-for-dotnet/
代码位于http://github.com/synhershko/NAppUpdate (根据Apache 2.0许可证获得许可)
我计划在获得更多时间的时候进一步扩展它,但是老实说,你应该能够自己快速地增强它,无论它目前不支持什么。
有一个非常好的实用程序称为更新 。 它看起来像是用C或C ++编写的。 我已经能够configurationXML文件并将它们加载到生产服务器上,然后我可以使用更新程序运行并检查XML文件以获取其他版本,并下载使用Nullsoft脚本安装系统构build的新更新安装包(NSIS)。
我们调查了一些选项,并决定使用AppLife更新 。 AppLife Update可以快速方便地为您的.NET应用程序添加自动更新function,但由于其全面的API,它也很灵活。
在他们的网站上查看完整的function列表和一些演示video。
DotNetAutoUpdate
我已经实现了一个名为DotNetAutoUpdate (原名eh?)的库。 它的目标是:
- 简单易用
- 设置简单
- 安全
要更新.Net客户端应用程序,请查看AppLife更新 。 它非常灵活,可扩展和可定制。
免责声明 – 我与AppLife更新。