等待(网络)服务器启动,然后再运行Inno Setup [运行]部分中的另一个程序

时间:2020-05-31 07:35:09

标签: installation inno-setup cherrypy

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

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

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

1 个答案:

答案 0 :(得分:1)

waituntilidle是非常具体的东西。它在内部使用WaitForInputIdle WinAPI function。阅读有关它的更多信息,以了解何时可以使用它。

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


甚至更容易的是将一个功能/开关添加到您的应用程序(而不是服务器)中,使其等待服务器运行。