2012-08-08 30 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