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

时间:2009-04-23 07:02:52

标签: c#

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

如果有,则继续更新软件。

这通常如何处理?

5 个答案:

答案 0 :(得分:20)

看看Click OnceThis thread也可能会进行有趣的阅读。

答案 1 :(得分:12)

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

wyUpdate处理所有Vista / Windows 7 UAC问题以及当您尝试更新复杂软件时不可避免地出现的所有文件权限问题。

话虽这么说,如果你想建立自己的更新程序,这里有一些提示:

构建您自己的更新程序

一个好的起点是我上面提到的wyUpdate C# source code。您可以蚕食它并将其用于您自己的目的。它包含的一些算法:

  • 完整的Windows Vista / Windows 7 UAC支持
  • 有限的用户可以检查,如果他们有凭据则更新
  • 支持不稳定的企业inernet。 (如果你曾与公司合作过这是一个真正的问题)。
  • 快速提取,修补和安装文件。
  • 注册表支持。
  • 回滚档案&注册表错误或用户取消
  • 自我更新(没有留下文件)

我们也有file specifications here

自动更新

由于要求自动是一项要求,让我告诉您我们如何使用AutomaticUpdater control

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

这使更新程序与您的应用程序分开。

事实上,我们使用的确切命名管道C#代码包含在我写的一篇文章中: Multi-process C# app like Google Chrome

答案 2 :(得分:10)

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

  1. 创建一个具有唯一名称的XML文件,例如help.xml,并构建一个结构,以指定要在特定目录和版本等中更新的文件列表。然后将其上传到您的网站上。< / p>

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

  3. 如果存在新版本的文件,请从help.xml文件中指定的网址开始下载!

答案 3 :(得分:4)

其他答案看起来很棒。

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

我在peSHIr Tweets中使用这个简单的方法,效果很好。您只需在线下载新版本即可更新此文件,您的更新检查会找到它。正如你自己写的那样,关于这个过程的任何事情都可以改变。

除非这是一个供您娱乐/使用/学习的私人项目 - 就像在我的情况下一样 - 看看是否已有任何适合您的需求!

答案 4 :(得分:0)

看看:Update Checker,我已经写了它,以展示在C#中实现此功能的简便方法。

此XML文件管理更新:

 Controller control;
 switch (selectedModel) {
        case "author":
            control = AuthorController; 
            break;
        case "book":
            control = BookController;
            break;
 }
 switch (selectedAction) {
      case "create":
          control.create();
          break;
      case "read": 
       //etc
 }

主要功能Check4Update()读取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>