我必须编写一个自动更新服务,以在我们的客户端PC上更新我们公司的应用程序。更新的一个应用程序是更新程序本身。我使用WIX创建的MSI包部署所有应用程序。MSI/WIX:如何(自我更新)正在运行的服务
该服务然后用“msiexec.exe/q/i”跨过一个进程来启动无提示安装。
这适用于其他产品,但是当我想更新正在运行的服务时,该服务是启动调用安装程序的进程的服务。因此,我正在尝试更新正在运行的进程。
我该怎么办? “分叉”安装程序并退出服务?使用一些聪明的Windows内置方法?
解决方案
(见下文)
最安全的方法可能是临时安装第二个服务来代表您的服务进行升级。但实际上,启动一个子进程应该也是一样,除了边缘情况,例如机器在错误时刻重启。 (可能会有更聪明的解决方案涉及Windows Installer,因此其他人可能有更好的主意。) –
这与自定义卸载过程需要卸载自身的问题相同。一些可行的方法是将一个小的外部代码文件(不需要有exe后缀)复制到临时文件夹和CreateProcess服务中。它可能有代码等待你完成更新之前完成。将它置于临时状态通常不是问题,因为人员和流程将其清除。 – PhilDW
我不认为msiexec关心哪个进程创建它。在任何情况下,如果MSI的操作停止并替换服务,然后重启服务,则应该没有问题 - 只要该服务在预期的时间范围内成功停止,即可响应停止信号。更新正在运行的服务很常见。请用一些代码来编辑问题以帮助显示问题。 –