如何关闭/交互rubyw.exe启动任务

时间:2012-08-08 07:13:41

标签: c# ruby windows-services

看起来我的谷歌搜索技能很糟糕,我找不到一些问题的答案:

我从C#服务中调用ruby任务。除了服务中的一些东西,以获取信息表格注册表,准备任务等我终于做到了:

      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端口。当我终止进程时,端口被Windows设计阻止2-3分钟(不确定多长时间 - 并且没有找到禁用此功能)。

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

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

1 个答案:

答案 0 :(得分:1)

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

相关问题