2012-08-08 32 views
1

它看起来像我的谷歌搜索技巧是坏,我不能对一些问题寻找答案:如何关机/交互的rubyw.exe启动任务

我称之为从C#服务红宝石任务。除了在服务某几个东西来获得相关信息的形式登记,准备任务等我做的最后:

 m_mProcess.StartInfo = new ProcessStartInfo { FileName = Command, Arguments = Argument, WorkingDirectory = WorkDir, CreateNoWindow = true }; 
     m_mProcess.Start(); 
     Pid = m_mProcess.Id; 

文件名是“ruby.exe”。我尝试了很多东西,以便在停止服务时向发起的任务发送CTRL-SIGNAL-BREAK(请参阅此处导致失败的更多详细信息:Start a EXE file from a service and stop it by sending SIGBREAK)。

因此,现在我只是停止与Process.GetProcessById(Pid).Kill();的过程。

这只会带来一个问题。我使用ruby任务启动瘦服务器,该任务在tcp端口上打开并侦听。当我杀死进程时,端口被设计窗口阻塞2-3分钟(不知道确切的时间 - 没有找到禁用此功能的时间)。

到目前为止的前言。现在到我的实际问题:)。

我正在考虑使用rubyw.exe而不是ruby.exe,并找到任何方式与任务交互。我的希望是,可以在不阻塞任何端口的情况下正确关闭/停止rubyw.exe任务。 我已经改变了服务,以rubyw.exe开始测试任何副作用或问题,而不是使用ruby.exe(到目前为止还找不到任何)。但是我仍然必须杀死这个进程,直到我找到一种正确关闭进程的方式。

回答

1

对于这样的问题,可能有更复杂的解决方案,但我通过管理系统环境变量来简化它。所以,当我开始一个脚本,我给变量的值“运行”,如果我想停止它,我的调用程序将其更改为“停止”。脚本监视变量,当它发现一个“停止”,如果关闭很好,就在退出之前将该值设置为“停止”,以便调用程序知道脚本确实停止。这是一种适用于任何环境和任何语言的解决方案,但是当然您需要访问Rubyscript来更改它们。

+0

对于这种情况,我需要修改瘦服务以在循环中检查此var,并在var设置为停止时将其关闭。这是一种方法,我可以检查,但也希望其他答案来解决它:) – YvesR 2012-08-08 07:49:08