如何实现“退出升级并重启”安装程序?

时间:2014-11-25 23:25:08

标签: qt installer cross-platform

许多应用程序现在都具有此功能,但Spotify客户端就是一个很好的例子。

该应用程序发现有新版本可用,在后台下载,然后提示用户重新启动以获取新版本。当用户退出时,安装了新版本(或者修补了已安装的版本),然后重新启动应用程序,无需进一步的用户交互。实际上,如果用户从未收到通知,则用户甚至不必做任何应用程序会在每个出口处自动更新的操作。

我们有一个跨平台的Qt 5.3应用程序,我们的精益创业业务模式要求我们经常推送应用程序更新,所以我真的很想找到一个跨平台工作的方法,尽可能少的平台特定代码。

这个问题有很多部分。

  1. 注意到更新,并下载安装程序。 (明显,而不是问题)
  2. 运行安装程序应用程序。除了如何获得特权外,这不是问题吗? Spotify从未要求在第一次安装后再次安装专用软件。
  3. 避免"此应用程序已从互联网上下载"每次更新的批准对话。
  4. 升级后重新启动应用程序,但仅在用户响应退出和升级提示时。
  5. 具体是否有任何工具,安装程序或代码示例可以执行此操作?

1 个答案:

答案 0 :(得分:1)

您可以按照Google Chrome和Opera(最新版本,而不是版本< = 12)的说法进行操作,如下所示:

  1. 安装应用程序时,请定期创建以管理员(或有权将文件写入应用程序目录的用户)的更新程序运行的计划任务。例如,在Windows中,您可以在任务计划程序中找到GoogleUpdateTaskMachineCoreGoogleUpdateTaskMachineUA条目。

  2. 您的应用程序结构如下所示(Google Chrome在C:\Program Files (x86)\Google\Chrome\Application中具有类似的结构):

      

    C:\ Program Files \ AwesomeApp \ launcher.exe

         

    C:\ Program Files \ AwesomeApp \ 1.0 \ AwesomeApp.exe;应用程序版本1.0

         

    C:\ Program Files \ AwesomeApp \ 1.2 \ AwesomeApp.exe;应用程序版本1.2

  3. 安装程序创建的应用程序快捷方式将运行launcher.exe。此launcher.exe将运行目录中可用的最新版本的AwesomeApp.exe。例如,在上面的结构中,launcher.exe将运行AwesomeApp\1.2\AwesomeApp.exe

  4. 当updater发现更新时,它会下载并将新版本添加到后台目录中。之后,它将告诉正在运行的应用程序(如果它正在运行)通知用户更新已准备就绪,可以通过重新启动应用程序来使用。当然,您的旧应用程序需要关闭自己并通过运行launcher.exe重新启动。此更新程序可能会删除旧的应用程序版本,并仅保留最新的两个版本。