私の Google 検索スキルが低すぎるようです。いくつかの質問に対する回答が見つかりませんでした:
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();
です。
これにより、問題が 1 つだけ発生します。ruby タスクを使用してシンサーバーを起動し、tcp ポートを開いてリッスンします。プロセスを強制終了すると、設計上 2 ~ 3 分間、ポートが Windows によってブロックされます (正確な時間は不明で、この機能を無効にする方法がわかりませんでした)。
前編はここまで。今、私の実際の問題に:)。
rubyw.exe
代わりにandを使用ruby.exe
して、タスクと対話する方法を見つけることを考えていました。ポートをブロックすることなく、rubyw.exe タスクを正しくシャットダウン/停止できることを願っています。ruby.exe を使用する代わりに、サービスを rubyw.exe で開始するように変更して、副作用や問題をテストしました (まだ見つかりません)。しかし、プロセスを正しくシャットダウンする方法が見つかるまで、プロセスを強制終了する必要があります。