如何让我的C#应用程序检查更新?

如何让我的C#应用程序检查更新?,c#,C#,我正在构建一个C#windows应用程序。 我想要它,所以每当我点击表单中的更新按钮时,应用程序就会开始查找我的服务器上是否有可用的新版本 如果存在,则继续更新软件 这通常是如何处理的?看看。也可能是一个有趣的阅读。其他答案看起来很棒 但是,如果您出于任何原因想要手动滚动自己的文件,只需将包含更新过程所需信息(例如当前可用版本的描述和版本号)的XML文件放在Web服务器上的某个位置,并使用HttpWebRequest(或HttpWebClient?)下载此文件并像下载任何XML一样进行处理 我在

我正在构建一个C#windows应用程序。 我想要它,所以每当我点击表单中的更新按钮时,应用程序就会开始查找我的服务器上是否有可用的新版本

如果存在,则继续更新软件


这通常是如何处理的?

看看。也可能是一个有趣的阅读。

其他答案看起来很棒

但是,如果您出于任何原因想要手动滚动自己的文件,只需将包含更新过程所需信息(例如当前可用版本的描述和版本号)的XML文件放在Web服务器上的某个位置,并使用
HttpWebRequest
(或
HttpWebClient
?)下载此文件并像下载任何XML一样进行处理

我在中使用了这个简单的方法,效果非常好。将新版本联机下载后,只需更新此文件,您的更新检查就会找到它。这个过程中的任何事情都是可以改变的,就像你自己写的那样


除非这是一个供你自己娱乐/使用/学习的私人项目——就像我的情况一样——尽管如此,一定要看看已经有什么东西适合你的需要

首先,我要说的是,我们提供了一个完整的更新解决方案,其中包括:

  • 一个,用C写的#
  • 您可以将其添加到.NET应用程序的表单中
  • 并管理您的版本
wyUpdate处理所有Vista/Windows 7 UAC问题,以及在尝试更新复杂软件时不可避免地出现的所有文件权限问题

也就是说,如果您想构建自己的更新程序,这里有一些提示:

构建自己的更新程序 一个好的起点是我上面提到的。你可以把它拆开,并把它用于你自己的目的。它包含的一些算法:

  • 完全支持Windows Vista/Windows 7 UAC
  • 允许有限用户检查并更新是否有凭据
  • 支持不可靠的企业网络。(如果你曾经在一家公司工作过,这是一个真正的问题)
  • 快速提取、修补和安装文件
  • 注册表支持
  • 用户出错或取消时回滚文件和注册表
  • 自我更新(无遗留文件)
我们也有

自动更新 既然自动化是一项要求,那么让我来告诉你我们是如何用我们的计算机来实现的

我们使用命名管道在独立更新程序(wyUpdate)和程序窗体上的自动更新程序控件之间进行通信。wyUpdate向自动更新程序报告进度,自动更新程序可以告诉wyUpdate取消进度、开始下载、开始提取等

这将使更新程序与应用程序分离


事实上,我们使用的确切命名的pipes C#代码包含在我不久前写的一篇文章中:

如果您希望您的应用程序从网站自动更新并自行处理代码,请执行以下步骤:

  • 创建一个具有唯一名称的XML文件,例如
    help.XML
    ,并构建一个结构来指定要在特定目录和版本等中更新的文件列表。然后将它们上载到您的网站上

  • 连接到网站后,应用程序将下载此
    help.xml
    文件并读取内容以确保有任何错误 网站上的新文件(更新文件)

  • 如果存在新版本的文件,请从
    help.xml
    文件中指定的URL开始下载

  • 看一看:,我写它是为了展示用C#实现这个特性的简单方法

    此XML文件管理更新:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <myCoolApp>
        <currentVersion>
            <major>9</major>
            <minor>1</minor>
            <build>5</build>
        </currentVersion>
        <path>http://TestApp.exe</path>
    </myCoolApp>
    

    ClickOnce有一个主要缺点——它在启动自己的应用程序之前会弹出自己的窗口,这对初次使用它的用户来说既难看又令人困惑。它应该像Firefox或Reflector一样工作……我读到你可以改变这种行为,例如:。@Krzysztof,它不需要这样做。这完全取决于您如何配置和构建更新解决方案。您可以在应用程序中编写所有clickonce交互,而无需框架提供的对话框。我可以保证wyBuild和wyUpdate是一款优秀的产品。它比ClickOnce灵活得多,而且价格非常便宜--软件工程的一个重要方面是知道何时购买和何时构建,对我来说,这是一个明确的购买决定。查看这些产品,它们看起来棒极了。我只希望有一天我能使用它们。:)我们为开源项目和学校赞助的学生项目提供免费许可证。请参阅:如果有大量用户请求相同的文件,例如:100个用户运行该程序,启动时每个程序会发送100个请求(版本检查)。这会挂起标准共享托管服务器吗?如我所写:对于简单的内容,您可以自己编写。这也意味着你必须自己考虑可能出现的问题,在这种情况下你希望发生什么,如果你想为此采取措施。我只是告诉你我在我的利基应用程序中使用了什么。。
    XmlDocument oDom = new XmlDocument();
    oDom.Load(_sXmlConfig);
    
    string str = oDom.SelectSingleNode("//currentVersion/major").InnerText;
    Int32.TryParse(str, out _nMajor);
    
    str = oDom.SelectSingleNode("//currentVersion/minor").InnerText;
    Int32.TryParse(str, out _nMinor);
    
    str = oDom.SelectSingleNode("//currentVersion/build").InnerText;
    Int32.TryParse(str, out _nBuild); 
    
    _sNewVersionPath = oDom.SelectSingleNode("//path").InnerText;