Auto-uninstall old before installing new

From NSIS Wiki

Author: codehistorian (talk, contrib)


This is a code snippet you can put into your .onInit function that will detect whether your software is already installed and, if so, allows the user to uninstall it first.

In the source below, we use the define ${PROGRAM_NAME} to be the name of the product as well as the name of the installer/uninstaller. You can either define this define or search/replace it. If you name your uninstaller or registry location differently, you should change those strings accordingly.

Function .onInit
 
  ReadRegStr $R0 HKLM \
  "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PROGRAM_NAME}" \
  "UninstallString"
  StrCmp $R0 "" done
 
  MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION \
  "${PROGRAM_NAME} is already installed. $\n$\nClick `OK` to remove the \
  previous version or `Cancel` to cancel this upgrade." \
  IDOK uninst
  Abort
 
;Run the uninstaller
uninst:
  ClearErrors
  ExecWait '$R0 _?=$INSTDIR' ;Do not copy the uninstaller to a temp file
 
  IfErrors no_remove_uninstaller done
    ;You can either use Delete /REBOOTOK in the uninstaller or add some code
    ;here to remove the uninstaller. Use a registry key to check
    ;whether the user has chosen to uninstall. If you are using an uninstaller
    ;components page, make sure all sections are uninstalled.
  no_remove_uninstaller:
 
done:
 
FunctionEnd

The following variant lets the uninstaller remove itself, so the IfErrors block is not needed any more:

  Exec $INSTDIR\uninst.exe ; instead of the ExecWait line
Posted by leafbird 트랙백 0 : 댓글 0

댓글을 달아 주세요

* 이전에 작성한 indeo 코덱 설치하기 포스트도 참고하세요 *
2009/03/12 - [기타] - [NSIS] 비스타에서 인스톨 할 때 indeo 코덱 설치하기.

3월 12일에 nsis에서 인디오 코덱을 설치하는 과정을 포스팅 한 적이 있습니다.
이번에 게임에서 사용하는 동영상 코덱이 변경되어, 이를 추가기록 합니다.

xvid는 오픈소스 프로젝트로, http://xvid.org 에서 인스톨러나 소스를 다운받을 수 있습니다.
인스톨러 셋업파일은 기본 UI 지원방식 이지만 /SILENT 와 /VERYSILENT 옵션을 지원합니다.

  • /SILENT 옵션은 버튼 조작과정은 없지만 진행과정을 표시하는 UI가 출력되고,
  • /VERYSILENT 옵션은 진행과정표시 UI도 출력되지 않고 인스톨되는 방식입니다.


xvid의 설치는 자체 인스톨러의 옵션 지원으로, 이전 indeo 설치과정보다 더 심플하게 가능합니다.


하지만 위의 방식은 단순하게 배포본 xvid 코덱 셋업파일을 같이 실행시키는 것 뿐이라... 게임 플레이엔 지장이 없겠지만 깔끔한 처리방식은 아닙니다. 정말 게임에 지장이 없을 최소스펙으로만 인스톨 하려면 xvid.ax 파일만을 등록(regsvr32) 해주면 되는듯 하군요.

http://www.msfn.org/board/lofiversion/index.php/t7771.html

간결한 버전으로의 인스톨 수정은 기존 indeo 코덱 처리와 비슷할 듯 하니 (스크린샷 참고),
요청이 들어오면 어렵지 않게 수정 될듯 하네요 :)

[수정, 090903] 실제 xvid 동영상 재생만을 위해서는 xvid.ax, xvidcore.dll 두 개의 파일만 있으면 됩니다. 인스톨러 설치가 아닌 디코더만 설치할때는 아래처럼 처리하면 됩니다.


그나저나 우리 프로젝트는 반디 동영상 재생 라이브러리 ( http://www.bandisoft.com/bandi_video_library/ ) 를 구매하기로 했군요;;

여태 삽질한 코덱 설치는 그냥 좋은 추억거리공부거리로...... -┌)...

Posted by leafbird 트랙백 0 : 댓글 0

댓글을 달아 주세요

우리 게임에서는 캐릭터 설명을 위한 동영상을 재생합니다.
유저 컴퓨터에서 동영상을 제대로 재생하기 위해서는 코덱이 설치되어 있어야 하죠.
오늘 받은 오류 레포트 중에서 인스톨시 indeo 코덱을 설치하다 발생하는 오류에 대한 이슈가 있어서
이를 해결하고 기록을 남기기 위해 포스팅 합니다.


정확한 원인은 파악하지 못했지만 비스타의 경우, 기본으로 설치된 ir50_32.dll이 약간 비정상적인 상태로 존재할 때가 있습니다.
system32 경로 아래 있는 ir50_32.dll을 덮어쓰려고 하거나, 리네임(rename), 삭제(delete) 등 수정을 가하는 액션을 취하면 권한이 필요하다며 작업이 되지 않는 케이스가 그것인데요. 이런 경우 nsis에서 파일을 덮어쓰려고 하면 위와 같은 오류가 발생합니다.

그러니 사실 NSIS의 문제는 아니지요. 비스타 문제인지... indeo 코덱이 문제인지... 혹은 파일 보호 및 보안 차원에서 의도된 처리인지... 조금은 궁금하지만 그건 out of bussiness 입니다. 제가 필요한건 게임이 오류 없이 install 되고, 플레이에 지장이 없으면 되거든요.

위와 같은 경우는 그냥 아래와 같이 파일 복사 절차를 건너 뛰어 주면 그만이더군요.



내일이 우리 게임 ( http://karcass.co.kr ) 2차 클베 하는 날입니다!
대박 나서 돈 많이 벌었음 좋겠어요!!
Posted by leafbird 트랙백 1 : 댓글 1

댓글을 달아 주세요

  1. addr | edit/del | reply Favicon of https://devnote.tistory.com BlogIcon leafbird 2009.09.03 14:55 신고

    /*
    # 코덱삭제
    UnRegDLL "$SYSDIR\ir50_32.dll"
    Delete "$SYSDIR\ir50_32.dll"
    */