2012-10-05 4 views
0

안녕하세요 모두 내가 파이프 파이프 서버 코드가 포함 된 Windows 응용 프로그램이 중지 될 때까지 서비스 응용 프로그램이 작동하는 서비스 기반 응용 프로그램을 만들었습니다.응용 프로그램을 계속 실행

+6

질문 제목에 태그를 포함하지 마십시오. 대신 태깅 시스템을 사용하십시오. –

답변

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(); 
} 
관련 문제