2011-05-09 5 views
1

C# 및 .NET Framework 4.0을 사용하여 Windows 서비스를 개발 중입니다.Windows 서비스에서 EventLogSource를 생성해야하는시기/위치는 무엇입니까?

Windows 서비스가 EventLog에 항목을 쓰려면 이벤트 로그 소스가 없으면 확인하고 만들어야합니다.

if (EventLog.SourceExists("MySource") == false) 
      EventLog.CreateEventSource("MySource", "MyLog"); 

어디서 이벤트 로그 소스를 확인하고 생성해야하는지 혼란 스럽습니다. Installer Service의 Windows Service 또는 Constructor 메소드의 Constructor 메소드에서 작성해야합니까?

내가 인터넷 검색을 할 때 나는 두 가지 방법을 모두 찾았습니다. 그럼, 나에게 가장 좋은 방법을 조언 해 주시겠습니까? 감사.

+1

코드를 삽입 할 때마다 사용 권한 문제가 발생할 수 있습니다. 서비스 계정이 이벤트 로그에 쓸 수있는 권한이 있지만 이벤트 원본을 만들 수있는 권한이없는 것은 일반적입니다. – MusiGenesis

답변

0

설치 프로그램에서 이벤트 로그 원본을 추가하는 것이 더 좋을 것이라고 생각하지만 서비스가 시작될 때 이벤트 로그 원본이 있는지도 확인해야합니다. 또한 생성자에서 이벤트 로그 소스를 추가하는 대신 설치 프로그램 이벤트 중 하나를 사용하는 것이 좋습니다. 이전에는이 ​​작업을 수행하지 않았지만 AfterInstall 이벤트는 이벤트 로그 소스를 추가하기에 좋은 장소로 보입니다 (자세한 내용은이 질문에 대한 답변 참조 : Automatically start a Windows Service on install).

설치 로그 서비스를 추가하기 위해 설치 프로그램 서비스를 사용하는 이유는 @MusiGenesis가 지적했듯이 응용 프로그램 설치시 이벤트 로그 원본을 만드는 데 필요한 보안 액세스 가능성이 더 높기 때문입니다 . 서비스가 실행 중이면 이벤트 로그 원본을 만들 수있는 권한이없는 계정으로 설정할 수 있습니다.

서비스 자체에서 이벤트 로그 소스도 있는지 확인합니다. 그것이 존재하지 않으면 당신은 그것을 다시 만들려고 할 수 있습니다. 그리고 그 시도가 실패하면 당신은 당신의 필요에 가장 적합한 어떤 행동을 취할 수 있습니다. 예를 들어 :

  • 파일 시스템 어딘가에 를 기록하는 서비스에 대한 것을 주장에 오류 메시지가 로그인하면 서비스가 시작하지 않도록
  • 가 예외를 던져 사용할 수 없습니다 ( 에 윈도우의 원인이해야하는
  • 안 전적으로 로그인 자체의 이벤트 로그 항목) 등을 쓰기

당신은 확인 (그리고 존재하지 않는 경우에) 이벤트 로그 소스를 만들려고하면 서비스를 사용하면 서비스가 의존하는 이벤트 로그 소스를 삭제하는 사용자 또는 다른 프로그램을 허용 할 수 있다는 장점이 있습니다.

관련 문제