2011-10-06 2 views
0

나는 Windows Forms 응용 프로그램을 C# .net 4.0에서 개발 중입니다. Windows 로그 오프 이벤트를 캡처하고 싶습니다.SystemEvents.SessionEnding not firing

public Form1() 
    { 
     InitializeComponent(); 

     SystemEvents.SessionEnding += (s, e) => 
     { 
      if (e.Reason == SessionEndReasons.Logoff) 
      { 
       MessageBox.Show("LogOff"); 
      } 
      else if (e.Reason == SessionEndReasons.SystemShutdown) 
      { 
       MessageBox.Show("ShutDown"); 
      } 
     }; 
    } 

왜 sessionEnding 발사 밤은 : 여기

코드인가?

답변

2
  1. gpedit.msc에 설정된 구성에 따라 다릅니다.

오픈 gpedit.msc를 컴퓨터 구성에> 관리 템플릿> 시스템> 종료 옵션을 탐색하고 차단 또는 종료를 취소 응용 프로그램의 자동 종료 해제를 선택합니다. 내 노트북 ​​구성 이후 자동 종료합니다, 그래서

  1. 은 아마 당신은 (주에서) 윈도우의 진입 점에 위의 코드를 이동할 수 있습니다 종료 세션을 발생하지 않습니다.

  2. 아마도 윈도우 메시지를 무시할 수 있습니다. MSDN 라이브러리 설명서에서 볼 수 있습니다. http://msdn.microsoft.com/en-us/library/microsoft.win32.systemevents.sessionending.aspx

  3. 종료 메시지 펌프는 다른 소프트웨어에 의해 경로를 다시하고이 누군가에게 도움이 될 수있는 앱을

0

에 경로를 다시하지되었습니다. 형태 close 이벤트가 포함 된 경우

private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     e.Cancel = true; 
    } 

, 난 그냥이 문제를 encoutered 내가 Alt + F4에 따라 양식 가까이를 방지 할 필요가 여기

void SystemEvents_SessionEnding(object sender, Microsoft.Win32.SessionEndingEventArgs e) 
    {} 

를 정류 한 후 SessionEnding 해고되지 않습니다 명령,이 양식을 닫는 이벤트를 추가하여이 문제가 발생했습니다. 우리는 세션 종료 이벤트를 양식 닫기 이벤트에 통합 할 수 있습니다. 옵션 2 in Refered from stackoverflow answer