2013-05-08 1 views
3

를 로그 오프 한 사용자 HKEY_CURRENT_USER 값을 삭제합니다 (위해 Excel에서 추가 기능) 로그온 한 사용자 각각에 대한 HKEY_CURRENT_USER 레지스트리 키에 (ImpersonateLoggedOnUser()RegSetValueEx()를 호출하여). 시스템 종료를 포함하여 사용자가 로그 오프 할 때이 레지스트리 값을 삭제해야합니다. 로그 오프 할 때 로그 파일이 삭제되지 않고 한 사용자가 소프트웨어를 제거하면 레지스트리의 항목이 서비스 수명 동안 로그온 한 다른 사용자에게 남아있어 Excel이 나타날 때마다 메시지 상자 오류가 표시됩니다 더 이상 존재하지 않는 추가 기능을로드하려고 시도하기 때문에 시작됩니다.Windows 서비스가 레지스트리 값을 생성

고려하지만 다음 거부 :

  • SetConsoleCtrlHandler() 로그 오프 어떤 사용자의 징후가 없기 때문입니다.
  • REG_OPTION_VOLATILE 키를 만들 때만 효과적이며 값을 생성하기 때문에 (철저하게 조사하지 않아서 키를 만들었더라도 솔루션이되지 못했기 때문)

이에 대한 해결책을 제공하는 다른 메커니즘이 있습니까? Windows 버전은 XP, Vista 및 7입니다.

+0

['WM_QUERYENDSESSION'] (http://msdn.microsoft.com/en-ca/library/windows/desktop/aa376890(v=vs.85)asp#)는 어떻습니까? – chris

+0

@chris, 사용자가 어떻게 로그 오프 했습니까? – hmjd

+0

서비스 프로그램 및/또는 소프트웨어 설치를 제어합니까? 그렇다면 소프트웨어가 종료 될 때 값을 설정 해제 할 수 있습니다 (실제로 C++을 사용하는 경우 RAII 사용). 설치/제거 프로그램을 제어하는 ​​경우 제거시 레지스트리에서 이러한 값을 제거하는 옵션이 있습니다. –

답변

2

이미 서비스 중이므로 입니다. 사실 자신을 등록하여 SERVICE_CONTROL_SESSIONCHANGE 이벤트를 수신 할 수 있습니다. 특히 WTS_SESSION_LOGOFF 이유를 찾고 싶을 것입니다.

시작시 서비스 제어 루틴에 SERVICE_ACCEPT_SESSIONCHANGE을 추가하여 이러한 이벤트를 등록해야합니다. 이벤트가 SERVICE_CONTROL_SESSIONCHANGE 인 경우 lpEventData 매개 변수는 WTSSESSION_NOTIFICATION 구조에 대한 포인터이며 현재 세션이 종료 중이므로 (즉, 사용자가 로그 오프 한 경우) 정보를 포함합니다.

체크 아웃이 관련 (하지만 중복되지 않음) MSDN1, MSDN2, MSDN3 - the data structure that contains the dwSessionId of the interesting session

체크 아웃에 대한 세부 사항을 question 너무

내가 주앙 아우 솔루션 청소기를 찾을 말했다

; 나는 비슷한 문제에 대해 그것을 사용할 것이다. 그러나, 나는 (나중에 참조 할 수 있도록 독자를 위해) 더 넓은 질문에 대한 답변을 가지고위한

편집이 솔루션을 추가하고 싶었 : 또 다른 방법은을 넣어하는 것이 MSDN article

+0

로그인 한 사용자가 여러 명인 경우 어떤 사용자가 로그 아웃했는지 어떻게 알 수 있습니까? – hmjd

+0

dwSessionId 매개 변수를 사용합니다. 그런 다음 사용자에게 어떤 종류의 정보를 얻으 려면 (WTSQuerySessionInformation을 통해 생각할 수 있습니다.) –

+0

이 지점을 명확히하기 위해 대답을 편집했습니다. –

0

더 쉬운 방법을 확인 SENS를 사용하는 것입니다 예를 들어, 사용자는 runonce 키에 해당 값을 제거하는 명령,

reg.exe delete HKCU\Software\xyzzy /v myvalue /f 

이 원하지 않는 값이. 주에서 사용자가 다음 로그 그러나이 값의 생성을 방해 할 수 있다는 때 제거됩니다 그래서 당신이 그것을 어떻게 다루고 있는지에 따라.

관련 문제