【发布时间】:2009-04-23 07:02:52
【问题描述】:
我正在构建一个 C# windows 应用程序。 我想要它,所以每当我单击表单中的更新按钮时,应用程序都会开始寻找我的服务器上是否有可用的新版本。
如果有则继续更新软件。
这通常是如何处理的?
【问题讨论】:
标签: c#
我正在构建一个 C# windows 应用程序。 我想要它,所以每当我单击表单中的更新按钮时,应用程序都会开始寻找我的服务器上是否有可用的新版本。
如果有则继续更新软件。
这通常是如何处理的?
【问题讨论】:
标签: c#
看看Click Once。 This thread 也可能读起来很有趣。
【讨论】:
首先我要说的是,我们提供了一个完整的更新解决方案,其中包括:
wyUpdate 处理所有 Vista/Windows 7 UAC 问题以及在您尝试更新复杂软件时不可避免地出现的所有文件权限问题。
话虽如此,如果您想构建自己的更新程序,这里有一些提示:
我上面提到的wyUpdate C# source code 是一个很好的起点。您可以将其蚕食并将其用于您自己的目的。它包含的一些算法:
既然自动化是一项要求,让我告诉你我们如何使用我们的AutomaticUpdater control 做到这一点。
我们使用命名管道在独立更新程序 (wyUpdate) 和位于程序窗体上的自动更新程序控件之间进行通信。 wyUpdate 向 Automatic Updater 报告进度,Automatic Updater 可以告诉 wyUpdate 取消进度、开始下载、开始解压等。
这使更新程序与您的应用程序分开。
事实上,我们使用的确切命名管道 C# 代码包含在我不久前写的一篇文章中:Multi-process C# app like Google Chrome。
【讨论】:
如果您希望您的应用从网站自动更新并自行处理代码,请执行以下步骤:
创建一个具有唯一名称的 XML 文件,例如 help.xml,并构建一个结构来指定特定目录和版本等中要更新的文件列表。然后将它们上传到您的网站。
连接到网站后的应用程序下载此help.xml 文件并读取内容以确保有任何
网站上的新文件(更新文件)...
如果存在新版本的文件,请从help.xml 文件中指定的 URL 开始下载!
【讨论】:
其他答案看起来很棒。
但是,如果您出于某种原因想要自己动手制作,只需将包含更新过程所需信息的 XML 文件(例如当前可用版本的描述和版本号)放在网络服务器的某个位置并使用HttpWebRequest(或HttpWebClient?)下载此文件并像处理任何 XML 一样处理。
我在peSHIr Tweets 中使用了这个简单的方法,效果很好。只需在您将新版本在线下载后更新此文件,您的更新检查就会找到它。关于这个过程的任何内容都可以按照您自己的方式进行更改。
除非这是一个供您自己娱乐/使用/学习的私人项目 - 就像我的情况一样 - 如果有任何可用的东西适合您的需求,请看看!
【讨论】:
看看:Update Checker,我写它是为了展示在 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>
主要函数Check4Update()读取XML文件并解析:
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;
【讨论】: