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;