프로그램을 개발하던 중에, IE를 모두 닫은 후에 프로그램을 제거해야만 하는 경우가 있었습니다.
이런 경우 InstallShield 프로그램에서 다음과 같이 처리하면 IE를 모두 닫고 제거를 수행하도록 할 수 있습니다.
아래의 코드를 OnMaintUIBefore에 적당히 넣으시면 됩니다.
STRING svResult, szCaption, szAppPath;
NUMBER nResult, nRetry;
HWND nhWnd, nHwnd;
....
svResult = @PRODUCT_NAME+"를 시스템에서 제거합니다. 계속 하시겠습니까?";
szCaption = @PRODUCT_NAME+" 제거";
nResult = SprintfBox(MB_YESNO|MB_ICONQUESTION, szCaption, "%s", svResult);
if (nResult = IDNO) then
exit; // "아니오" 버튼을 선택한 경우, 제거하지 않는다.
elseif(nResult = IDYES) then
nhWnd = FindWindow(IE_CLASS_NAME, "");
if( NULL != nhWnd) then
svResult = @PRODUCT_NAME2+"를 시스템에서 제거하기 위해서는 먼저 익스플로러를 종료해야 합니다.\n\r모든 익스플로러창을 닫으시겠습니까?";
szCaption = "익스플로러 동작 확인";
nResult = SprintfBox(MB_YESNO|MB_ICONQUESTION, szCaption, "%s", svResult);
if(nResult = IDYES) then
nRetry = 0;
Loop:
nRetry++;
//예 버튼을 눌렀을 경우에 익스플로러 를 종료한다.
nHwnd = FindWindow (IE_CLASS_NAME, "");
if( nHwnd!=NULL ) then
SendMessage (nHwnd, WM_SYSCOMMAND, SC_CLOSE, 0);
if nRetry<1000 then // 1000회까지만, 닫기 시도를 한다.
goto Loop; //종료 후 다시한번 반복하여 다시한번 종료한다.
endif;
endif;
if (nRetry=1000) then
svResult = "익스플로러를 종료하는데 실패하였습니다.\r\n모든 익스플로러창을 닫고 다시 시도해 주십시오.";
szCaption = @PRODUCT_NAME+" 제거 실패";
nResult = SprintfBox(WARNING, szCaption, "%s", svResult);
exit;
endif;
elseif (nResult = IDNO) then
svResult = @PRODUCT_NAME+"를 시스템에서 제거하기 위해서는 먼저 익스플로러를 종료해야 합니다.";
szCaption = @PRODUCT_NAME+" 제거 실패";
nResult = SprintfBox(INFORMATION, szCaption, "%s", svResult);
exit;
endif;
endif;
// setup default status
SetStatusWindow(0, "");
Enable(STATUSEX);
StatusUpdate(ON, 100);
szCaption = TARGETDIR;
// 설치한 모든 파일들을 삭제한다.
ComponentRemoveAll();
'프로그래밍' 카테고리의 다른 글
자바스크립트로 ContextMenu 및 특수키 입력 제한 풀기 (0) | 2008.02.21 |
---|---|
detour - WIN32 API Trace Utility (0) | 2007.12.22 |
InstallShield 7.0 Pro 버전에서 언인스톨 아이콘(Add Uninstall Shortcut) (0) | 2007.12.22 |
PostgreSQL DB 백업 및 MS-SQL로의 이전 (0) | 2007.12.21 |
PostgreSQL OLEDB 연결 정보 설정 (0) | 2007.12.21 |