0

こんにちは、パイプと通信するサービス ベースのアプリケーションを作成しました。サービス アプリケーションは、パイプ サーバー コードを含む Windows アプリケーションが停止するまで動作します。

4

1 に答える 1

0

次のコードを試してください。コード内のこのプロセスを、サービス用に既に持っているコードとマージする必要があります。「PipeServiceName.exe」をプロセスの名前に置き換えます。また、このコードは 5 秒ごとにチェックします。これは、5000 の数値を変更することで変更できます。

「パイプ」とサービスがどのように相互作用するかを詳しく知らなければ、ワークフローをまとめるのは困難です。

private readonly ManualResetEvent _shutdownEvent = new ManualResetEvent(false);
private Thread _thread;

public MyService()
{
    InitializeComponent();
}

protected override void OnStart(string[] args)
{
    _thread = new Thread(MonitorThread)
    {
        IsBackground = true
    }
}

protected override void OnStop()
{
    _shutdownEvent.Set();
    if (!_thread.Join(5000))
    {
        _thread.Abort();
    }
}

private void MonitorThread()
{
    while (!_shutdownEvent.WaitOne(5000))
    {
        Process[] pname = Process.GetProcessesByName("PipeServiceName.exe");
        if (pname.Count == 0)
        {
             // Process has stopped. ReLaunch
             RelaunchProcess();
        }
     }
}

private void RelaunchProcess()
{
    Process p = new Process();

    p.StartInfo.FileName = "PipeServiceName.exe";
    p.StartInfo.Arguments = ""; // Add Arguments if you need them

    p.Start();
}
于 2012-10-05T17:16:10.480 に答える