在Inno Setup [Run]部分,等待(web)服务器启动后再运行其他程序。

问题描述 投票:1回答:1

我的Inno Setup安装程序包含一个小型网络服务器和一个桌面应用程序。这两个程序都是独立的可执行文件。在安装过程中,我想在启动桌面程序之前先启动webserver,使其运行起来。我试图在 [Run] 的部分,如下所示。

[Run]
Filename: "{app}\Server\{#ServerExeName}"; \
    Description: "{cm:LaunchProgram,{#StringChange(ServerName, '&', '&&')}}"; \
    Flags: waituntilidle runascurrentuser
Filename: "{app}\App\{#AppExeName}"; \
    Description: "{cm:LaunchProgram,{#StringChange(AppName, '&', '&&')}}"; \
    Flags: nowait postinstall

这并不奏效,因为安装程序不能正常完成,操作系统挂起等待服务器 (ServerExeName). 我猜它是在等待服务器进入空闲状态,而这是不会发生的。同样的事情也适用于'waituntilterminated'标志,因为服务器将不会终止)。在继续(启动其他应用程序)之前,有什么首选的Inno Setup方法来确保服务器已经启动?

我正在运行Inno Setup 5.6.1u,但如果需要的话我可以升级。网络服务器是CherryPy网络服务器,使用PyInstaller捆绑到exe中。应用程序是定制的基于wxWidgets的GUI。

installation inno-setup cherrypy
1个回答
1
投票

waituntilidle 是非常特殊的事情。它在内部使用 WaitForInputIdle WinAPI函数. 阅读更多关于它的信息来了解它何时可以被使用。

如果它不适合您的服务器应用程序,您必须在其中实现某种信号,以便Inno Setup可以查找。在*nix系统中,通常使用pidfile来实现这个目的。或者使用一个mutex或者其他类似的机制。


更简单的方法是在您的应用程序(而不是服务器)中添加一个函数开关,使其等待服务器的运行。

© www.soinside.com 2019 - 2024. All rights reserved.