2009-08-22 5 views
1

사용자가 대화 상자 창에서 이유를 선택한 직후 Windows Server 2008에서 종료 이유를 얻을 수 있습니까? 시스템 종료 이벤트의 경우 SystemEvents.SessionEnding을 사용하고 있습니다. 이 이벤트에 대한 전자 메일을 보낼 Windows 서비스를 작성하고 싶습니다.C#에서 Windows 서버 종료 원인 얻기

또는 Windows 서버에서 사용자가 입력 한 이유와 함께 종료/다시 시작 이벤트에 대한 전자 메일을 보내려면 다른 방법이 있습니까? 또한, 전원 공급 장치 변경 (선/배터리)에 대해 알려 드리고 싶지만, 이미 Kernel32.dll> GetSystemPowerStatus로 해결했습니다.

답변

5

EventLog를 검사하는 종료 이유를 얻을 수 있습니다.

Windows 서비스에 적응할 수있는 Windows Forms의 빠른 데모를 구성했습니다.

EventLog 구성 요소를 Form에 추가하고 올바르게 구성했습니다. 아래 스 니펫은 디자이너를 통해 설정 한 설정의 InitializeComponent()에서 생성 된 코드를 보여줍니다.


private void eventLog1_EntryWritten(object sender, System.Diagnostics.EntryWrittenEventArgs e) 
{ 
    EventLogEntry entry = e.Entry; 
    if (e.Entry.EventID == 1074) 
    { 
     File.AppendAllText(@"c:\message.txt", entry.Message); 
    } 
} 

가 필터링 적절한 EventIds를 확인하려면 이벤트 로그를 살펴 보자 : 이벤트 핸들러에

this.eventLog1.EnableRaisingEvents = true; 
this.eventLog1.Log = "System"; 
this.eventLog1.Source = "USER32"; 
this.eventLog1.SynchronizingObject = this; 
this.eventLog1.EntryWritten += new System.Diagnostics.EntryWrittenEventHandler(this.eventLog1_EntryWritten); 

, 당신은 다음과 같은 라인을 따라 뭔가를해야합니다.

컴파일러는 EventID에 대해 경고하고 InstanceId를 사용해야한다고 경고하지만 여기에서 수행 한 빠른 테스트에서 내 로그 파일에 기록하지 않았고 이미 충분한 정보를 가지고 있다고 생각합니다 당신을 궤도에 올려 놓습니다.

0

물론 가능합니다. 실시간으로 해당 comboBox 값을 가져 오려면 해당 프로세스에서 스레드 모니터를 실행하여 해당 값이 변경 될 때 이벤트를 발생시켜야합니다.