看来我的谷歌搜索技能太差了,我找不到一些问题的答案:
我从 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(请参阅此处导致失败的更多详细信息:从服务启动 EXE 文件并通过发送停止它信号中断)。
所以现在我只是用Process.GetProcessById(Pid).Kill();
.
这只会带来一个问题。我使用 ruby 任务启动了一个瘦服务器,该任务打开并侦听 tcp 端口。当我终止进程时,端口被 Windows 设计阻止了 2-3 分钟(不确定到底有多长时间 - 并且没有发现禁用此功能)。
前传到此为止。现在到我的实际问题:)。
我正在考虑使用rubyw.exe
而不是ruby.exe
找到与任务交互的任何方式。我希望可以在不阻塞任何端口的情况下正确关闭/停止 rubyw.exe 任务。我已经将服务更改为从 rubyw.exe 开始以测试任何副作用或问题,而不是使用 ruby.exe(到目前为止还找不到)。但是我仍然必须终止该进程,直到找到正确关闭该进程的方法。