C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[73642] Re:Re:[질문] windows7 에서 WM_QUERYENDSESSION 이벤트 발생 시 shutdown.exe 프로세스 실행이 안되는데..
푸릉푸릉 [glmslst] 7549 읽음    2016-05-30 14:29

답변 감사합니다.

32비트, 64비트 환경 모두 동일하게 문제 발생하긴 합니다.

아래 TOKEN_PRIVILEGES 권한으로 InitiateSystemShutdown API 실행 시에는 동작하지 않는 것을 확인하였으나,
TOKEN_PRIVILEGES 권한을 주고, ExitWindowsEx API 실행시에는 정상 동작하는 것을 확인하였습니다.

ExitWindowsEx 함수 실행 시 EWX_FORCE 를 주는 것이 중요하였습니다.

fResult = ExitWindowsEx( EWX_REBOOT | EWX_FORCE,
               SHTDN_REASON_MAJOR_OPERATINGSYSTEM |
               SHTDN_REASON_MINOR_UPGRADE |
               SHTDN_REASON_FLAG_PLANNED );

그러나, 해당 API는 Windows 8 에는 또 정상 동작하지 않아 shutdown.exe 실행하여 재부팅 진행하는 것으로 처리하였습니다.


감사합니다.




사탄 님이 쓰신 글 :
: 64비트에서 환경인가요?
:
: 일단 shutdown 방식이 잘못되었습니다.
:
: TOKEN_PRIVILEGES 으로 권한 과 API를 이용하여 진행 해보세요
:
: 아래는 MSDN 코드입니다.
:
:
: HANDLE hToken; 
: TOKEN_PRIVILEGES tkp; 
: BOOL Result; 
: 
: if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) 
:     return; 
: LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid); 
: tkp.PrivilegeCount = 1; 
: tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 
: AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES) NULL, 0); 
: if (GetLastError() != ERROR_SUCCESS) 
:     return; 
: Result = InitiateSystemShutdown( 
:             NULL, 
:             L"System rebooting.", 
:             0, // TIMEOUT 
:             FALSE, 
:             TRUE); 
: if (!Result) 
:     return; 
: tkp.Privileges[0].Attributes = 0; 
: AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES) NULL, 0); 
: 
: 

:
: 푸릉푸릉 님이 쓰신 글 :
: :
: :
: : 안녕하세요..
: :
: : windows7 에서 WM_QUERYENDSESSION 이벤트 발생 했을 때 시스템 종료를 막고, shutdown.exe 이용하여 재부팅을 하게 하고 있는데요
: : shutdown.exe 실행할 때 "응용 프로그램을 제대로 시작하지 못했습니다" 에러가 발생합니다..
: :
: : XP 같은 경우는 WM_QUERYENDSESSION 이벤트에서 시스템 종료 막고, PostMessage 이용하여 shutdown.exe 실행하면 정상 동작하고
: : windows 8 이상 OS 에서는 WM_QUERYENDSESSION 이벤트에서 바로 shutdown.exe 실행하면 정상동작하는데..
: :
: : windows 7 에서는 종료는 잘 막히는데 shutdown.exe 실행이 안됩니다.
: :
: : '컴퓨터 종료' 하면 무조건 저기서 hold 시키고 작업을 진행해야 하는 것으로 알고 있는데..
: : 저 이벤트에서 hold 시키면 빠져나오는 것도 아니고 계속 hold 되어 있고..
: : 그 상태에서 프로세스 실행하려 하니 이미 종료 단계에 들어가 있어서 실행 안되는 것 같고..
: :
: :
: : 혹시 해결할 수 있는 방법이 있을까요?
: : 아래는 현재 테스트 중인 코드입니다..
: :
: :
: : --------------------------------------------
: : void __fastcall TForm1::WMQueryEndSession(TMessage &Msg)
: : {
: :     if( Msg.LParam != ENDSESSION_CRITICAL )
: :     {
: :         if( m_bReboot == false )
: :         {
: :             //xp
: :             //{
: : //            m_bReboot = true;
: : //
: : //            Msg.Result= LRESULT(false);    //prevent shutdown..
: : //
: : //            PostMessage( this->Handle, WM_TEST_ADD, NULL, NULL );
: :             //}
: :
: :             //win7
: :             //{
: :             m_bReboot = true;
: :
: :             Msg.Result= LRESULT(false);    //prevent shutdown..
: :
: :             ShutdownBlockReasonCreate( this->Handle, L"please wait while muting... (test)");
: :
: :             WinExec( "C:\\Windows\\System32\\shutdown.exe /r /t 1", true );
: :
: :             //PostMessage( this->Handle, WM_TEST_ADD, NULL, NULL );
: :
: :             WaitFor( 10000 );
: :
: :             ShutdownBlockReasonDestroy( this->Handle );
: :
: :             //}
: :             return;
: :         }
: :     }
: :
: :     Msg.Result = LRESULT(true);
: :
: : }
: : --------------------------------------------
: :
: :
: : 
: :
: :

+ -

관련 글 리스트
73636 [질문] windows7 에서 WM_QUERYENDSESSION 이벤트 발생 시 shutdown.exe 프로세스 실행이 안되는데.. 푸릉푸릉 7628 2016/05/27
73637     Re:[질문] windows7 에서 WM_QUERYENDSESSION 이벤트 발생 시 shutdown.exe 프로세스 실행이 안되는데.. 사탄 11262 2016/05/27
73642         Re:Re:[질문] windows7 에서 WM_QUERYENDSESSION 이벤트 발생 시 shutdown.exe 프로세스 실행이 안되는데.. 푸릉푸릉 7549 2016/05/30
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.