启动 Play 应用程序并关闭窗口
Posted
技术标签:
【中文标题】启动 Play 应用程序并关闭窗口【英文标题】:Start Play Application and Close Window 【发布时间】:2012-10-15 11:27:38 【问题描述】:我在 Windows 7 机器上有一个播放应用程序,我想通过双击批处理文件来启动它。
此批处理文件启动服务。调用 play 应用程序以生产模式运行,等待 5 秒并打开具有指定 url 的浏览器。
因此我使用了以下脚本:
call net start service1
CALL "D:\play-1.2.5\play.bat" start --%%%%prod -Dprecompiled=true
TIMEOUT /T 4
call "C:\Program Files (x86)\Mozilla Firefox\firefox.exe" localhost:9000
exit
现在,当我启动批处理文件时,窗口打开并执行所有命令。可悲的是,Play 仍在将他的输出写入 cmd 并且窗口并没有消失。如果我手动关闭窗口,播放将停止执行。
如果我从 cmd 使用“播放开始”运行播放,播放会在后台开始,一切都很好。即使我关闭窗口,播放仍会运行。
当我使用批处理文件启动应用程序时,我希望有这种行为。
谢谢
【问题讨论】:
在我的 Windows 时代,我也为此苦苦挣扎。但我最终创建了一个计划任务,因为我的要求发生了变化。在 Mac 中我start play
然后 CTRL
+C
关闭终端..
【参考方案1】:
如果您使用的是类 linux 环境,我建议您使用 'nohup' 命令和最后一个 '&' 符号。然而,不幸的是,据我所知,在 Windows 上并没有直接等同于漂亮的“nohup”命令。所以,我能想到的是,您可以创建一个使用CreateProcess 命令的小型win api 应用程序,并在创建进程后为其提供所需的参数以隐藏命令行窗口。还有其他进程创建函数,如WinExec,可以用来隐藏命令行。
【讨论】:
对不起,我没有提到我正在使用 Windows 7 作为操作系统。我更新了我的问题。 @Gambo,您无需提及,您在问题中发布的代码肯定是 Windows 风格的。 Here你可以找到一个sn-p,显示如何在Windows环境下创建一个新进程(屏幕下方)。只需创建一个新的小型 C 项目,粘贴此代码,参数化命令行字符串,然后使用正常运行您的 play 项目的命令运行这个新项目的可执行文件【参考方案2】:我不知道 Play 是什么,所以我只能猜测 :) 但尝试使用没有 call
的批次,因为我认为它们没有必要,而且你永远不知道,可能会修复问题。
【讨论】:
我试过了,但是批处理正在停止并等待光标闪烁的过程【参考方案3】:1) 您会看到 Play 的输出,因为它仅重定向 system.out 但将 system.err 写入同一控制台。
2) 我也有这个问题,正在寻找解决方案。作为一种解决方法,您可以尝试使用一些 Java Wrapper 并安装您的 Play!应用程序作为 Windows 服务。
3) 玩!应用程序可以通过 Ant 任务启动。我还没试过。
【讨论】:
以上是关于启动 Play 应用程序并关闭窗口的主要内容,如果未能解决你的问题,请参考以下文章
Play Framework + Akka:如何避免在关闭应用程序时执行计划任务