c++ - 自动检查我的应用程序的新版本

标签 c++ qt

为了满足客户的功能要求,我希望我的应用程序在 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/

相关文章:

字符串和 while 语句的 C++ 问题

qt - 在QML中拖动元素时如何实时获取鼠标坐标?

image - 缩小时 GraphicsView fitInView() 非常像素化的结果

c++ - 匹配位串

c++ - Poco HTTPClientSession 将 header 添加到 HTTPRequest

c++ - 从可能引发异常的函数返回 std::string

c++ - 如何调用对未覆盖的派生类函数的调用?

c++ - 如何使用 QThread 在后台工作线程中从 Qt GUI 调用方法

python - PyQt 连接 SIGNAL 到多个 SLOT

c++ - 带标题的QFrame