如何构建一个可以自行更新的软件更新服务?

时间:2013-08-22 19:08:51

标签: delphi windows-services auto-update

我知道很多软件都是由安装在一起的Windows服务更新的。我将该服务作为客户端应用程序的更新帮助程序和数据服务器。但我仍然坚持如何从这项服务中控制我的客户端应用程序。

首先,我的服务将检查远程服务器上的更新,然后下载文件。

它会向客户广播新闻,询问用户是想立即更新还是下次执行。

在更新时,客户端应用程序无法删除它自己的可执行文件,因此,如果它要求服务器在它不执行时执行它,那么它是有意义的,然后当完成删除和重命名文件时,它会重新执行客户。

如果服务在会话0中,则无法将客户端重新执行到同一用户会话。

另一个可能的问题是当服务需要更新时。它可以通过客户端而不是自己更新来解决。

因此,在更新客户端和服务器的情况下,我是否需要创建第三个应用程序来完成工作。如果这第三个应用程序是一个控制台应用程序,从服务执行它是没有问题的,对吗?

如果有一个解决方案不包含第三个应用程序,那将是最好的。


注意:

该服务不仅仅是一个更新服务,而是一个通知用户访问和权限的服务器。主客户端应用程序不会直接访问user information database

1 个答案:

答案 0 :(得分:7)

  

如果服务在会话0中,则无法将客户端重新执行到同一用户会话。

是的,如果您使用CreateProcessAsUser()指定用户帐户和桌面来运行应用程序,则会这样做。客户端可以在终止服务之前将该信息传达给服务。

但无论如何,更新exe需要它先停止运行。因此,在更新服务时,特别是因为服务不仅仅处理客户端更新,使用安装程序停止服务,替换exe并重新启动服务会更安全。在这种情况下,为什么不使用安装程序进行客户端更新?下载的更新可以是一个自包含的安装程序,可以根据需要停止客户端和服务,替换文件,然后让客户端或服务在退出后删除安装程序,或者安装程序可以要求Windows删除安装程序。下次操作系统重启。