자료 저장소

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;

 

 

댓글 로드 중…

최근에 게시된 글