为了满足客户的功能要求,我希望我的应用程序在 Internet 可用时检查我们的网站是否有可用的新版本。
问题是我不知道在服务器端需要做什么。
我可以想象我的应用程序(使用 Qt 在 C++ 中开发)必须向服务器发送请求(HTTP ?),但是会响应这个请求吗?为了通过防火墙,我想我必须使用端口 80 ?这是正确的吗?
或者,对于这样的功能,我是否必须要求我们的网络管理员打开一个特定的端口号,我将通过该端口号进行通信?
@ pilif : 谢谢你的详细解答。对我来说还有一些不清楚的地方:
like
http://www.example.com/update?version=1.2.4
Then you can return what ever you want, probably also the download-URL of the installer of the new version.
如何返回?它将是一个 php 或 asp 页面(我对 PHP 或 ASP 一无所知,我不得不承认)?我怎样才能解码 ?version=1.2.4
部分以便相应地返回一些东西?
最佳答案
我绝对建议只对您的网站进行简单的 HTTP 请求。其他一切都注定失败。
我会向您网站上包含本地应用程序版本的特定页面发出 HTTP GET 请求。
喜欢
http://www.example.com/update?version=1.2.4
然后你可以返回你想要的任何东西,也可能是新版本安装程序的下载 URL。
为什么不把最新版本的静态文件放到服务器上,让客户端决定呢?因为您可能希望(或需要)控制该过程。也许 1.2 将来不会与服务器兼容,因此您希望服务器强制更新到 1.3,但是从 1.2.4 更新到 1.2.6 可能并不重要,因此您可能希望向客户端显示可选更新。
或者您想对安装基础进行 segmentation 。
或其他。通常,我了解到最好在服务器上保留尽可能多的智能,因为服务器是您最终控制的对象。
这里有一些该领域的经验,这里有一个小预览,可以(并且将会 - 相信我)出错:
- 您的应用程序将被各种个人防火墙应用程序阻止发出 HTTP 请求。
- 相当大比例的用户没有实际进行更新过程所需的权限。
- 即使您的用户允许旧版本通过他们的个人防火墙,该工具也会提示,因为 .EXE 已更改,并会建议用户不要让新的 exe 连接(用户通常会遵守他们的安全意愿工具)。
- 在托管环境中,您将因从网络加载可执行内容然后实际执行而被处以绞刑(不一定按此顺序)。
所以为了尽量降低伤害,
- 当您无法连接到更新服务器时静默失败
- 在更新之前,请确保您对安装目录具有写入权限,如果您没有或根本不更新,则会警告用户。
- 为管理员提供关闭自动更新的方法。
做你将要做的事情并不有趣——尤其是当你像我无数次那样与非技术倾向的用户打交道时。
关于c++ - 自动检查我的应用程序的新版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56391/