我的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。
答案 0 :(得分:1)
waituntilidle
是非常具体的东西。它在内部使用WaitForInputIdle
WinAPI function。阅读有关它的更多信息,以了解何时可以使用它。
如果它不适合您的服务器应用程序,则必须在其中实现Inno Setup可以寻找的某种信号。在* nix系统上,通常将pidfile用于此目的。或使用互斥或其他类似机制。
甚至更容易的是将一个功能/开关添加到您的应用程序(而不是服务器)中,使其等待服务器运行。