【发布时间】:2014-01-28 22:46:18
【问题描述】:
我有一个 Windows 游戏服务器 (Mount & Blade: Warband),我试图通过 Rails 应用程序远程控制它。我找到了一种使用 Windows Script Hosting 将文本发送到游戏服务器的方法,如下所示:
Set ArgObj = WScript.Arguments
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.AppActivate "mb_warband_dedicated"
For lcv = 0 to ArgObj.Count - 1
WshShell.SendKeys ArgObj(lcv)
WshShell.SendKeys "{Enter}"
Next
WshShell.SendKeys "start"
WshShell.SendKeys "{Enter}"
虽然这感觉很脆弱,但当我在本地机器上尝试时,它似乎确实有效;它成功地将焦点转移到游戏服务器,将其参数作为文本发送到游戏服务器,然后开始游戏。
我的思路是让我的 Rails 应用程序在发布游戏命令时调用 WSH 可执行文件(使用适当的 Rails 身份验证和授权以确保安全)。如果我将远程桌面连接到运行 Rails 和游戏服务器的远程计算机中,这可以工作,但是一旦我断开远程桌面会话,它就不再工作了。 Rails 服务器收到请求,调用脚本,但我猜测“AppActivate”命令找不到窗口。
如果它是一台 Linux 机器,我想我可以使用命名管道。这里有什么想法吗?电源外壳?也许TCL?我可以杀死游戏服务器进程,编辑配置,然后重新启动游戏服务器,但每个人都会断开连接。
【问题讨论】:
-
Rails 服务器是否作为 Windows 服务运行?如果是这样,您可能会遇到交互式应用程序的会话 0 隔离问题。见:blogs.technet.com/b/voy/archive/2007/02/23/…
-
我们正在使用适用于 Windows 的 RailsInstaller。运行
tasklist /svc列出'ruby.exe',所以是的,我相信它作为Windows 服务运行并且您的链接适用,谢谢。我需要一段时间才能确定这是否会导致解决方案,但如果您将此作为答案发布,我会接受并在我有其他问题时提出一个新问题。
标签: ruby-on-rails windows powershell named-pipes wsh