想纪念一个功能要求从我们的客户,我想,我应用程序,在互联网上提供,检查我们的网站上,如果一个新的版本可用。

问题是我不知道什么必须完成的服务器上面。

我可以想象我应用程序(开发在使用C++脱)已发送的要求(HTTP?) 到服务器,但是什么会响应这一要求?为了通过防火墙,我想我会使用港口的80?这是正确的?

或者,对于这样一个特征,我必须问问我们的网络管理员打开一个特定的口号,通过它我沟通?


@pilif :谢谢你的详细答复。还有什么是不清楚对我说:

喜欢

http://www.example.com/update?version=1.2.4

然后你就可以回报你什么都想要的,也可能下载网址安装新的版本。

我怎么回事?这将是一个php或asp页(我什么都不知道关于PHP也不ASP,我必须承认)?我如何能解码 ?version=1.2.4 部分为了回事?

有帮助吗?

解决方案

我绝对会建议只是做一个普通HTTP请求您的网站。其他的一切都是注定要失败的。

我会做一个HTTP得到请求的某些网站上的网页包含有版本的本地应用程序。

喜欢

http://www.example.com/update?version=1.2.4

然后你就可以回报你什么都想要的,也可能下载网址安装新的版本。

为什么不把一个静态的文件的最新版本的服务器,并让客户的决定?因为你可能想(或需要),以控制的进程。也许1.2不可兼容的服务器在未来,所以你要服务器力的更新,以1.3的,但更新从1.2.4到1.2.6可能会不加批判,因此你可能想到本客户有一个可选的更新。

或者你想要有一个破裂的安装基础。

或什么的。通常,我学到的最好保持尽可能多的情报服务器上的,因为服务器你有什么最终控制权。

说到这里,与一位在该领域的经验,这里有一个小型预览什么可以(而且会-相信我)去的错误:

  • 你的应用程序将是防止使HTTP-请求通过各种个人防火墙的应用程序。
  • 一个相当大的用户百分比不会有所需的权限实际上得到更新过程中去。
  • 甚至如果你允许用户有的旧版本通过他们的个人防火墙,所述工会抱怨因为.EXE已经改变并将推荐用户不允许的新的exe连接(用户通常遵守的意愿,他们的安全的工具)。
  • 在管理环境,你就会被枪杀并被绞死的(不一定按此顺序),用于装载可执行的内容的网络,然后实际执行。

因此,要保持伤害尽可能低的水平,

  • 失败的时候,你不能连接到更新服务器
  • 在更新之前,确保你已经写入许可安装目录,并向用户发出警告,如果不这样做,或只是没有更新。
  • 提供一种方式为管理人员把自动更新关闭。

这不有趣的事情你是什么做的-尤其是当你处理不在技术上倾斜的用户,因为我有许多时间。

其他提示

Pilif的答案是好的,我有很多的经验与这个过,但我想添加更多的东西:

记住,如果你开始yourapp.exe那么"更新"将试图复盖yourapp.exe 与最新的版本。取决于你的操作系统和程序环境的(你已经提到的C++/脱,我没有经验的那些),就会 能复盖 yourapp.exe 因为它会使用。

我所做的是创建一个发射器。我有一个MyAppLauncher.exe 使用配置文件(xml,非常简单的)推出的"真正的exe"。应该新版本存在,可以启动更新的"真正的exe",因为它在不使用,然后重新启动的新版本。

只要记住这一点,你会是安全的。

马丁,

你是绝对正确的,当然。但我会提供的启动,与安装。或者只是下载,安装程序的启动而放弃自己尽快。原因被错误发射。你将永远,永远,想到可以依赖于一件无法更新(或要忘记,包括在初始降).

所以有效载荷,我分发的更新过程应用程序只是个标准的安装,但没有任何重大的用户界面。一旦客户已经检查了这一安装了一个机会的成功运行,一旦它下载了更新程序,它运行和退出本身。

更新过运行安装其有效载荷进入原始的安装目录,并重新启动(希望更新)应用程序。

仍:该进程是毛茸茸的,你最好三思而后行,然后再实现自动更新的功能在视窗平台应用程序时有一个广泛关注的使用情况。

在php,事情很简单:

<?php
    if (version_compare($_GET['version'], "1.4.0") < 0){
        echo "http://www.example.com/update.exe";
    }else{
        echo "no update";
    }
?>

如果你当然可以延长这一因此目前可用的版本不是硬编码内脚本,但这仅仅是有关说明这一点。

在你的程序,你会有这样的伪码:

result = makeHTTPRequest("http://www.example.com/update?version=" + getExeVersion());
if result != "no update" then
    updater = downloadUpdater(result);
    ShellExecute(updater);
    ExitApplication;
end;

随以延长的"协议"通过指定的东西PHP script可以回去告诉客户是否是一个重要的、强制性的更新或没有。

或者你可以添加一些文字以显示用户-也许含有某些信息有什么改变。

你可能性是相当无限的。

我夸脱的应用程序,只采用QHttp读小XML文件掉我的网站包含最新版本的编号。如果这是大于当前的版本号,它提供选项的要去下载的页。非常简单。工作正常。

我同意@马丁和@Pilif的答案,但添加;

考虑你的最终用户的决定,如果他们想要的实际安装更新那里,然后,或是延迟更新的安装,直到他们已经完成了使用该程序。

我不知道的目/功能的应用程序,但许多应用程序启动时的用户需要做一些具体的事情那里,然后-什么都没有更讨厌的不是启动一个程序,然后被告知这是发现了一个新的版本,你不必等待它下载,关闭程序,并重新启动本身。如果你的计划有其他资源的可能更新(参考文件、数据库等等)的问题变得更糟。

我们有一个传统的运行系统中的约400商店,最初我们认为这将是巨大的,有的节目现场的更新和下载(使用一个文件包含一个版本的数量非常相似的建议,你有以上)...伟大的想法。直到所有的商店开始了他们的系统围绕同一时间(8:45-8:50),以及我们的服务器被击中供应的20多Mb下载到400远程服务器,那么这将更新当地的软件,并导致重新启动。混乱-有没有人能够贸易的大约10分钟。

不用说,这引起我们随后关闭"检查更新"的要素和重新设计它允许商店'迟延'的更新,直到在当天晚些时候。:-)

编辑:如果任何人从ADOBE是读书-对上帝的份上,为什么该死的acrobat reader坚持试图下载更新和废话的时候我只是想开火-它上阅读一个文件?是不是足够慢在开始,而臃肿不够的,因为它是,而不浪费一个进一步的20-30秒我的生活中寻找更新每次我想读PDF?
不他们使用他们自己的软件了吗?!!! :-)

在服务器你可能只有一个简单的文件"latestversion.txt"其中包含的版本数字(也许下载网址)的最新版本。客户然后只需要阅读本文件使用一个简单HTTP请求(是的,到港口的80)检索 http://your.web.site/latestversion.txt, ,然后你就可以分析得到的版本的编号。这种方式不需要任何特殊服务代码---你只需要添加一个简单文件的现有网站。

如果你保持你的文件的更新目录上example.com这PHP script应该载他们对你给予该请求的前提。(你的更新会yourprogram.1.2.4.exe

$version = $_GET['version'];    
$filename = "yourprogram" . $version . ".exe";
$filesize = filesize($filename);
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: post-check=0, pre-check=0");
header("Content-type: application-download");
header('Content-Length: ' . $filesize);
header('Content-Disposition: attachment; filename="' . basename($filename).'"');
header("Content-Transfer-Encoding: binary");

这使得你的网浏览器,认为它载有应用程序。

最简单的方式来做到这一点的是火HTTP请求使用一个图书馆喜欢 libcurl 并让它下载ini或xml文件,该文件包含了在线版本和新版本将在网上提供。

析后xml文件可以确定,如果一个新版需要和下载新版本libcurl和安装。

只是把一个(XML)文件服务器上的版本数的最新版本,和一个网址下载的新版本。你的应用程序然后请求在XML文件,看看如果该版本不同于其自身,并采取相应的行动。

我认为,简单的XML服务器上的文件将是足够的版本检查的唯一目的。

你会需要那么只有一个ftp帐户服务器上,并建立系统,该系统是能够发送一个文件通过ftp后,它已建立了一个新的版本。建立系统甚至可能会把文件的安装/拉链拉上你的网站直接!

如果你想保持它真正的基本的,只需上传一个version.txt 一个网络服务器,包含整版本的编号。下载,检查最新的version.txt 你下载的,然后就下载msi或安装和运行。

更先进的版本将使用rss,xml或类似。它将是最好使用第三方的图书馆分析rss,你可以包括信息显示给你的用户有关的变化,如果您希望这样做。

基本上你只需要简单下载功能。

这两个解决方案,将只需要你接入口80出从客户的侧面。这通常不需要任何更改,以防火墙或网络(在客户面)而你只是需要有一个互联网面临的网络服务器(网托管、托管或者你自己的服务器都将在这里工作).

有几个商业自动更新的解决方案。我会离开的建议,对于那些对他人的answerers,因为我只有经验。净侧的点击一次更新应用程序块(后者不是继续的任何更多)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top