在线更新C#程序

在线更新C#程序,c#,ftp,auto-update,C#,Ftp,Auto Update,您好 如果这个问题已经被问过,我很抱歉。我尝试过使用搜索功能,但找不到适合我情况的答案 我有一个真正简单的C#表单应用程序,只有一个文件,一个exe。 我目前通过4shared发布了这篇文章,人们可以随意下载 但是,每次我对程序进行更改时,人们都必须从4shared下载新版本 现在这不是一个理想的情况,我是一个noob当谈到创建升级,但我希望的情况是,该程序在一个网站/ftp服务器上,我部署了一个新版本 我正在我的程序中寻找一种方法来查看该网站/ftp服务器上的文件,并确定是否有新版本可用。 如

您好

如果这个问题已经被问过,我很抱歉。我尝试过使用搜索功能,但找不到适合我情况的答案

我有一个真正简单的C#表单应用程序,只有一个文件,一个exe。 我目前通过4shared发布了这篇文章,人们可以随意下载

但是,每次我对程序进行更改时,人们都必须从4shared下载新版本

现在这不是一个理想的情况,我是一个noob当谈到创建升级,但我希望的情况是,该程序在一个网站/ftp服务器上,我部署了一个新版本

我正在我的程序中寻找一种方法来查看该网站/ftp服务器上的文件,并确定是否有新版本可用。 如果网站/ftp服务器中有新版本可用,我希望该程序将自身更新为最新版本


希望你们能帮我解决这个问题,我希望我能充分解释我的情况

看看ClickOnce。它将为您完成此任务。

当我开发和发布此类应用程序时,我通常采用以下方式:

  • 开发.NET Windows窗体应用程序
  • 使用ASMX web服务开发一个小型ASP.NET应用程序
  • 将ASMX web服务发布到我的公共网站
  • 将web服务的WSDL引用添加到我的Windows窗体应用程序中
  • 创建一个设置(我更喜欢ClickOnce)
  • 我在SOAP web服务中实现的逻辑基本上是一个函数:

    [WebMethod]
    public string CheckUpdateAvailable( string currentVersion )
    {
        ...
    }
    
    Windows窗体应用程序调用此方法(例如,在程序启动时从后台线程),将其当前程序集版本作为字符串传递给函数

    WSDL函数依次根据最新安装版本检查传递的版本(例如,存储在
    web.config
    中或从服务器上的setup.exe实时提取)。如果存在较新版本,则返回一个字符串,其中包含要从中下载的URL;否则返回NULL


    当WSDL函数的调用者得到一个非空字符串时,它可以向用户显示一条消息,询问用户是否要下载并安装可执行文件,然后简单地执行URL(通过)。

    NetParkle是一个很好的替代方法,可以使用更多部署选项单击一次

    是到这里的路。我们已经使用它一年多了,效果很好(他们也有很好的支持)

    它实际上使用补丁来更新文件,这样当5MB的可执行文件只有一个小的变化时,客户端只需要下载一个以千字节为顺序的文件

    它们为Windows窗体或WPF提供了一个自动更新组件,该组件看起来很好,工作也很好

    您可以在FTP服务器或普通网站上承载更新文件,而无需任何服务器端配置


    还有很多内容,最好从如何设置更新开始。

    我写了一个开源库来满足我们对WinForms和WPF应用程序的特定需求。总体思路是以尽可能低的开销获得最大的灵活性。你所要做的就是创建一个更新提要并从你的应用程序中引用库

    因此,集成非常简单,库可以为您完成几乎所有的事情,包括同步操作。它也非常灵活,可以让您确定执行什么任务以及在什么条件下执行——您可以设置规则(或者使用一些已经存在的规则)。最后,最重要的一点是支持任何更新源(web、BitTorrent等)和任何提要格式——任何未实现的都可以自己编写

    还支持冷更新(需要重新启动应用程序),并自动完成,除非为任务指定了“热插拔”

    这一切归结为一个DLL,大小小于70kb

    详情请浏览

    代码位于(根据Apache 2.0许可证许可)


    当我有更多的时间时,我计划进一步扩展它,但老实说,无论它目前不支持什么,您都应该能够自己快速增强它。

    似乎正是我想要的。当我让它正常工作时,我会进一步研究它并接受它作为答案:)ClickOnce对我来说失败了。可能是因为我缺乏彻底解决问题的意愿。我自己写的,简单的更新程序@TheunArbeider是你的开源程序吗?你愿意和我们分享吗?Clickonce与我的需要不太兼容自从我只使用winforms,并且读到它存储在web.config中,我假设这不是我要找的?取决于:-)我使用ASP.NET只是为了更新检查机制。应用程序本身就是Windows窗体(,例如,顺便说一句),该网站对我来说似乎处于脱机状态。@Uwe:这很奇怪,现在是我自己,当我发布答案时。我同意。是的,现在又开始了。谢谢:-)