在 运行 Inno Setup [运行] 部分中的另一个程序之前等待(网络)服务器启动

Wait for a (web) server to start before running another program in Inno Setup [Run] section

我的 Inno Setup 安装程序包含一个小型网络服务器和一个桌面应用程序。这两个都是独立的可执行文件。在安装时,我想启动网络服务器,以便在启动桌面应用程序之前启动 运行。我正在尝试在我的 Inno Setup 脚本的 [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

这在安装程序未正确完成的意义上不起作用,os 挂起等待服务器 (ServerExeName)。我猜它正在等待服务器进入空闲状态,但这种情况并没有发生。 (同样的事情也适用于 'waituntilterminated' 标志,因为服务器将终止并且不会终止)。在继续(启动其他应用程序)之前确保服务器已启动的首选 Inno Setup 方法是什么?

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

waituntilidle 是非常具体的事情。它在内部使用 WaitForInputIdle WinAPI function。详细了解它以了解何时可以使用它。

如果它不适合您的服务器应用程序,您将不得不在其中实现某种信号,Inno Setup 可以查找该信号。在 *nix 系统上,pidfile 通常用于此目的。或者使用互斥锁或其他类似机制。


更简单的方法可能是向您的应用程序(而不是服务器)添加一个 function/switch,这将使其等待直到服务器 运行。