2014-02-15 2 views
0

app.exe이라는 Windows 응용 프로그램이 C# (Windows Forms)으로 작성되었으며 어떤 Windows OS (XP에서 8)로도 무인 을 실행한다고 가정 해 보겠습니다.C# Windows 응용 프로그램의 상태를 어떻게 모니터링합니까?

내가 응용 프로그램의 상태를 모니터링하고 싶습니다 :

  • 앱이 아직 실행하거나
  • 내부 오류 상태로

내 아이디어를 응용 프로그램 실행을 가지고 추락을 작업 스케줄러를 사용하여 Windows에서 예약 된 작업을 설정하여 Windows 콘솔 응용 프로그램 monitor.exe을 15 분마다 실행하는 것입니다. 모니터 앱에서 상태가 app.exe 인 이메일을 전송합니다. 내가 알아낼 수 없었다 무엇

: app.exe가 여전히 실행중인 경우

  • 어떻게 알 수 있습니까?
  • app.exe의 내부 변수에 액세스하려면 어떻게해야합니까? monitor.exe?

하나 개의 아이디어는 파일에서 내부 상태를 작성합니다 app.exe에서 타이머를 설정하고, monitor.exe 읽기 및 해당 파일을 15 분마다 평가하는 것이다. 그러나 그것은 나에게 매우 우아하게 보이지 않습니다 (그러나 효과가있을 것입니다).

당신은 더 나은 모범 사례를 사용하고 있습니까?

답변

1

여기 모니터 레이어와 서비스 레이어를 추가 할 수있는 좀 더 복잡한 솔루션이 app.exe입니다. 모니터 계층은 내부 변수 상태 수집을 담당하며 서비스 계층은 GetStatus 요청을 발행 한 사람에게 내부 상태를 제공합니다. monitor.exe이 실행될 때마다

, 그것은 app.exeGetStatus 서비스 요청을 발행하고, app.exe의 내부에서 무슨 일이 일어나고 있는지의 응답을 얻을.

단점은 app.exemonitor.exe 사이의 연결을 만들어야하며, 후자는 로컬 컴퓨터에 배포 된 모든 app.exe의 서비스 포트를 알아야한다는 것입니다.

+0

안녕하세요, 저는 그 생각을 좋아합니다. 명명 된 파이프 같은 것을 의미합니까? 클라이언트와 서버가 로컬에서 메시지를 교환하게 할 수있는 곳은 어디입니까? – Sebastian

+0

@Sebastian 네, 명명 된 파이프가 좋습니다. 자세한 구현은 다를 수 있습니다. – ssett

+0

IPC (Inter Process Communication)를 위해 명명 된 파이프를 사용하여 작업을 마쳤습니다. 그 개념은 완전히 새로운 것이 었습니다. 그래서 올바른 방향으로 나를 가리켜 주셔서 감사합니다. – Sebastian

0

상태로 타이머에 app.exe에서 메일을 보낼 수 있으며 지난 15 분 동안 메일을받지 못했다면 앱이 다운되거나 앱이 다운 된 것입니다.

또는 정보를 수집하는 작업에 try/catch를 만들면 abaut 크래시가 발생하고 현재 상태가 포함 된 전자 메일로 보내집니다.

+0

안녕하세요, TC Alper Tokcan 님, 다른 app.exes에 monitor.exe를 다시 사용하고 싶으므로, monitor.exe로 보내는 전자 메일을 구현하고 싶습니다. 따라서 app.exe의 상태에 액세스 할 대상을 알고 싶습니다. 고맙습니다! (: – Sebastian

+0

@Sebastian 나는'app.exe'가'monitor.exe'와 통신하는 유일한 방법은 상태에 대한 정보를 가지고'monitor.exe'에서 읽는'app.exe' 파일을 저장하는 것입니다 :) –

2

성능 카운터가 이에 적합합니다. PerformanceCounterType.ElapsedTime 카운터를 사용하고 메인 루프에서 "마지막으로 점검 한 시간"을 설정하는 여러 .Net 응용 프로그램이 있습니다.

그런 다음 중앙 집중식 모니터링 및 알림 시스템을 사용하여이 카운터를 모니터링합니다. (우리는 SolarWinds를 사용합니다.) 매분마다 무언가가 돌아가고 카운터가 5 분을 초과하면 경보가 울리도록 설정됩니다.