C# 保持应用程序运行

C# 保持应用程序运行,c#,service,C#,Service,大家好,我已经创建了一个基于服务的应用程序,它可以与管道通信 服务应用程序将一直工作,直到包含 管道服务器代码。请尝试以下代码。您必须将代码中的此过程与服务中已有的任何代码合并。将“PipeServiceName.exe”替换为调用进程的任何名称。此外,该代码每5秒检查一次。您可以通过更改5000号码来更改此设置 如果不了解更多关于“管道”和服务如何相互作用的信息,就很难将工作流组合在一起 private readonly ManualResetEvent _shutdownEvent = ne

大家好,我已经创建了一个基于服务的应用程序,它可以与管道通信 服务应用程序将一直工作,直到包含
管道服务器代码。

请尝试以下代码。您必须将代码中的此过程与服务中已有的任何代码合并。将“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();
}

请不要在问题的标题中包含标签。相反,使用标签系统。