2013-03-25 2 views
0

아래 코드를 사용하여 Windows 서비스의 두 번째 인스턴스를 제한하려고했지만 아래 코드가 작동하지 않습니다. 아무도 나를 도와 줄 수 없습니다. 첫 번째 인스턴스가 시작되고 실행 중이면 첫 번째 인스턴스가 완료되지 않은 경우에도 5 번째 회의 인스턴스가 시작된 후 서비스를 실행하는 데 시간 간격을 둡니다. 즉 5 분입니다.Windows 서비스 - 한 번에 하나의 인스턴스 만 허용합니다.

static class Program 
{ 
    [STAThread] 
    static void Main() 
    { 

    bool ok; 
    System.Threading.Mutex m = new System.Threading.Mutex(true, "ImageImportService", out ok); 
     if (!ok) 
     { 
      return; 
     } 
     GC.KeepAlive(m); 
     if (PriorProcess() != null) 
     { 
      return; 
     } 
     ServiceBase[] ServicesToRun; 
     ServicesToRun = new ServiceBase[] 
      { 
       new ImageImportService() 
      }; 
     ServiceBase.Run(ServicesToRun); 
    } 
    public static Process PriorProcess() 
    { 
     Process curr = Process.GetCurrentProcess(); 
     Process[] procs = Process.GetProcessesByName(curr.ProcessName); 
     foreach (Process p in procs) 
     { 
      if ((p.Id != curr.Id) && (p.MainModule.FileName == curr.MainModule.FileName)) 
       return p; 
     } 
     return null; 
    } 
} 
+5

동일한 서비스의 2 인스턴스를 실행할 수 있습니까? –

+0

어떻게 작동하지 않습니까? 정확히 무엇이 실패하고 있습니까? –

+0

첫 번째 인스턴스가 시작되어 실행중인 경우 5 분 2 초 인스턴스가 시작되고 첫 번째 인스턴스가 cimpleted가 아닌 경우에도 서비스를 실행하는 데 시간 간격을 둡니다. 5 분입니다. – user2061199

답변

1

Windows의 서비스 제어 관리자는 이미 실행중인 경우 Windows 서비스를 시작할 수 없도록 설정합니다. 그냥 의지하십시오.

중요한 일은 실행 파일을 직접 실행하지 않는 것입니다. 대신 코드에서 서비스를 시작할 때는 ServiceController 클래스를 사용하고 수동으로 시작/중지 할 때는 제어판 (services.msc)을 사용하십시오.

경우에 따라 서비스가 중지 된 후에도 리소스를 유지하지 않도록하기 위해 추가 단계를 수행해야 할 수 있습니다. 그러나 귀하의 질문에 귀하가 이미 그러한 문제 (예 : TCP 포트 리 바인딩)에 부딪쳤다는 것을 나타내지는 않습니다.

관련 문제