【问题标题】:Wait for a (web) server to start before running another program in Inno Setup [Run] section在 Inno Setup [Run] 部分中运行另一个程序之前等待(Web)服务器启动
【发布时间】:2020-05-31 07:35:09
【问题描述】:

我的 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

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

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

【问题讨论】:

    标签: installation inno-setup cherrypy


    【解决方案1】:

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

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


    更简单的方法可能是向您的应用程序(而不是服务器)添加一个功能/开关,使其等待服务器运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-06
      • 1970-01-01
      • 2016-05-17
      • 2011-12-09
      • 1970-01-01
      • 1970-01-01
      • 2015-03-30
      相关资源
      最近更新 更多