확실한 건 아니고.. 그냥 언뜻 든 생각인데요.
ShellExecute 대신 WinExec나 CreateProcess 등의 다른 함수를 쓰면 되지 않을까 싶습니다.
ShellExecute는 explorer.exe(탐색기)를 먼저 실행시키고 그 안에서 다시 cmd를 실행시키는 것이라, 시스템 종료시 탐색기가 종료된 상태에서 이상 동작할 가능성이 많아보입니다.
한상훈 님이 쓰신 글 :
: private
: procedure WMQueryEndSession(var Msg : TWMQueryEndSession); message WM_QueryEndSession;
: Procedure WMEndSession(var Msg : TWMEndSession); message WM_ENDSESSION;
:
: 이렇게 선언했구요.
:
:
: procedure TForm1.WMQueryEndSession(var Msg : TWMQueryEndSession) ;
: begin
: Msg.Result := 0;
: ShellExecute(.....);
: Msg.Result := 1;
: end;
:
: procedure TForm1.WMEndSession(var Msg : TWMEndSession) ;
: begin
: inherited;
: end;
:
:
: 이렇게 처리했습니다.
:
: ShellExecute 부분에서는 "CMD.exe /C run.bat" 를 실행하려고 하구요.
:
: 그런데 문제가 생겼습니다.
:
: Windows가 종료될때 CMD.exe가 실행이 되지 않고 "응용프로그램을 초기화하지 못했습니다.."라는 에러 메세지를 띄우고
: 명령을 실행하지 못하고 그냥 강제종료되어 버립니다.
:
: 에러메세지 없이 ShellExecute명령을 실행할 방법이 없을까요?
|