Installshield 스크립트를 수정할 일이 있어서 여기저기서 찾은 팁을 모아놓았습니다.
1. 설치 후 아이콘이 보이지 않을 때
2. 특정 GUID를 가진 프로그램을 설치 전에 삭제하기
3. 수정, 복구, 삭제 화면을 안보이게 하고 삭제만 진행하기
4. 시작 프로그램 메뉴에서 uninstall 메뉴가 보이지 않을 경우
5. 현재 특정 프로그램이 실행중일 때 설치 중단 또는 실행 프로그램 종료
1. 설치 후 아이콘이 보이지 않을 때
#define DLL_FILE "Shell32.dll" #define SHCNE_ASSOCCHANGED 0x08000000 #define SHCNF_IDLIST 0x0000 function OnEnd() begin /* 새로고침을 통해 등록된 아이콘을 정상적으로 표시함 */ SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL); end;
2. 설치 전에 특정 GUID를 가진 프로그램 삭제하기
function OnFirstUIBefore() begin .. UninstallApplication("{2ch4hff-a0e9-4a3b-be39-efb7c3f3c6d6}","/clone_wait ",LAAW_OPTION_WAIT|LAAW_OPTION_HIDDEN); .. end;
3. 수정, 복구, 삭제 화면을 안보이게 하고 삭제만 진행하기
function OnMaintUIBefore() number nResult, nType; begin // nType defaults to MODIFY. default 선택을 remove로 변경 nType = REMOVEALL; OnSQLServerInitializeMaint(); Disable( DIALOGCACHE ); // '삭제하시겠습니까?' 메시지 띄움 nResult = MessageBox( SdLoadString( IFX_MAINTUI_MSG ), MB_YESNO ); if (nResult != IDYES ) then abort; endif; FeatureRemoveAllInMediaAndLog(); end;
4. 시작 프로그램 메뉴에서 uninstall 메뉴가 보이지 않을 경우
스크립트 변경전에 아래에서 사용되는 Unistall.ico 파일이 필요합니다.
function OnMoving() string szAppPath; string szProgram; begin szAppPath = TARGETDIR; if (!MAINTENANCE) then szProgram = DISK1TARGET ^ "setup.exe"; LongPathToQuote(szProgram, TRUE); AddFolderIcon("Application", "Uninstall", szProgram, DISK1TARGET, TARGETDIR ^ "\\uninstall.ico", 0, "", REPLACE); Delay( 1 ); endif; end;
5. 현재 특정 프로그램이 실행중일 때 설치 중단 또는 실행 프로그램 종료
스크립트 변경전에 해당 Application에 아래와 같이 클래스명을 삽입하는 코드를 넣어야 합니다. (MFC인 경우)
/* MFC */ BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { ... WNDCLASS wc; ::GetClassInfo(AfxGetInstanceHandle(), cs.lpszClass, &wc); wc.lpszClassName = cs.lpszClass = _T("APP_CLASS_NAME"); wc.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); ::RegisterClass(&wc); return TRUE; } /* script */ function OnBegin() HWND nHwnd; begin // 현재 APP_CLASS_NAME이라는 프로그램이 실행중이라면 install 중단 nHwnd = FindWindow("APP_CLASS_NAME", ""); if (nHwnd != NULL) then MessageBox("현재 실행 중인 프로그램을 종료하고 다시 시도해주시기 바랍니다.", WARNING); abort; endif; end;
'개발 관련 > Windows 개발' 카테고리의 다른 글
CListCtrl 포커스 해제시 selection color 유지하기 (0) | 2014.01.03 |
---|---|
Visual studio 디버그 모드와 릴리즈 모드의 차이 (0) | 2013.04.15 |
IE10 설치시 Visual studio 2010 스크립트 디버거 연결 실패 문제 (2) | 2013.03.17 |
Visual studio 찾기 및 바꾸기 wildcards option (0) | 2013.01.16 |
윈도우 핸들로 컨트롤(Button, Edit, Combo.. ) 구분하는 방법 (0) | 2013.01.12 |