base.nsi 4.36 KB
; NSIS script - ONLY for use with AutoPublish/AutoUpdate system
; //keitsi

;--------------------------------
;Include Modern UI

  !include "MUI.nsh"

;--------------------------------
;Configuration
  SetCompressor lzma

  Name "<$PROJECTNAME$> v<$VERSION$> <$CUSTOMER$>"
  ; DO NOT CHANGE OutFile "installer_temp.exe" !!! AutoPublish requires this.
  ; AutoPublish will move the installer according to autopublish.xml file.
  OutFile "installer_temp.exe"

  ;Folder selection page
  InstallDir "$PROGRAMFILES\<$PROJECTNAME$>"
  
  ;Get install folder from registry if available
  InstallDirRegKey HKCU "Software\<$PROJECTNAME$>" ""

;--------------------------------
;Interface Settings

  !define MUI_ABORTWARNING

;--------------------------------
;Pages

  ; !insertmacro MUI_PAGE_LICENSE "license.txt"
  !insertmacro MUI_PAGE_COMPONENTS
  !insertmacro MUI_PAGE_DIRECTORY
  !insertmacro MUI_PAGE_INSTFILES

  ; !define MUI_FINISHPAGE_RUN $INSTDIR\<$BINARYNAME$>
  !insertmacro MUI_PAGE_FINISH

  !insertmacro MUI_UNPAGE_CONFIRM
  !insertmacro MUI_UNPAGE_INSTFILES

;--------------------------------
;Languages
 
  !insertmacro MUI_LANGUAGE "English"

;--------------------------------
;Installer Sections

Function GetDotNet
  IfFileExists "$WINDIR\Microsoft.NET\Framework\v2.0.50727\installUtil.exe" NextStep
  MessageBox MB_OK|MB_ICONEXCLAMATION "You must have the Microsoft .NET Framework 2.0 Installed to use this application. $\n$\nClick 'Open' in the following file dialog to download and run the Microsoft .NET Framework Installer..."
  ExecShell Open "http://www.microsoft.com/downloads/info.aspx?na=90&p=&SrcDisplayLang=en&SrcCategoryId=&SrcFamilyId=0856eacb-4362-4b0d-8edd-aab15c5e04f5&u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2f5%2f6%2f7%2f567758a3-759e-473e-bf8f-52154438565a%2fdotnetfx.exe" SW_SHOWNORMAL
  Quit
NextStep:
FunctionEnd

Function .onInit
	Call GetDotNet
FunctionEnd

Function .onInstSuccess
	Exec '"$INSTDIR\<$BINARYNAME$>"'
FunctionEnd

Function WaitProgramClose
	IfFileExists "$INSTDIR\<$BINARYNAME$>" loop NotInstalled
loop:
	ClearErrors
	Delete "$INSTDIR\<$BINARYNAME$>"
	${If} ${Errors}
		; Delete failed - means the program is still running. Sleep 2 seconds and retry.
		Sleep 2000
		ClearErrors
		Delete "$INSTDIR\<$BINARYNAME$>"
		${If} ${Errors}
			MessageBox MB_OK "Program <$BINARYNAME$> didn't close in 2 seconds. Automatic update can't continue before it's closed. Please close the program manually and hit OK to retry."
			goto loop
		${EndIf}
	${EndIf}
NotInstalled:
FunctionEnd

Section "!<$PROJECTNAME$> v<$VERSION$>" SecMain
  SetOutPath "$INSTDIR"
  Call WaitProgramClose
  SetOverwrite off
  File /oname=ramasignup.conf "<$BINARYDIR$>\ramasignup.conf"
  SetOverwrite on
  File /oname=autoupdate.xml "<$BINARYDIR$>\autoupdate.<$CUSTOMER$>.xml"
  File /oname=<$BINARYNAME$> "<$BINARYDIR$>\<$BINARYNAME$>"
  File /oname=RamaSignup.pdb "<$BINARYDIR$>\RamaSignup.pdb"
;  File /oname=Npgsql.pdb "<$BINARYDIR$>\Npgsql.pdb"



;  File /oname=NpgsqlAltPool.pdb "<$BINARYDIR$>\NpgsqlAltPool.pdb"
  File /oname=AutoUpdateLib.pdb "<$BINARYDIR$>\AutoUpdateLib.pdb"
;  File /oname=ConfLibSql.pdb "<$BINARYDIR$>\ConfLibSql.pdb"
  File autoupdate.crt
 ;File "..\..\res\speexenc.exe"
  ; File "<$BINARYDIR$>\logo.jpg"
  ; this line will be replicated for every non-default existing assembly
  ; that is referenced to the main project.
  File "<$REFERENCEDASSEMBLY$>"

  WriteRegStr HKCU "Software\<$PROJECTNAME$>" "" $INSTDIR
  
  ;Create uninstaller
  WriteUninstaller "$INSTDIR\Uninstall.exe"

    ;Create shortcuts
    CreateDirectory "$SMPROGRAMS\<$PROJECTNAME$>"
    CreateShortCut "$SMPROGRAMS\<$PROJECTNAME$>\<$PROJECTNAME$>.lnk" "$INSTDIR\<$BINARYNAME$>"
    CreateShortCut "$SMPROGRAMS\<$PROJECTNAME$>\Uninstall <$PROJECTNAME$>.lnk" "$INSTDIR\Uninstall.exe"
  
SectionEnd

;--------------------------------
;Descriptions

  LangString DESC_SecMain ${LANG_ENGLISH} "Base (required)"

;--------------------------------
;Uninstaller Section

Section "Uninstall"

  Delete "$SMPROGRAMS\<$PROJECTNAME$>\*"

  RMDir "$SMPROGRAMS\<$PROJECTNAME$>"
  Delete "$INSTDIR\<$BINARYNAME$>"
  Delete "$INSTDIR\autoupdate.xml"
  Delete "$INSTDIR\autoupdate.crt"
  Delete "$INSTDIR\speexenc.exe"

  ; this line will be replicated for every non-default existing assembly
  ; that is referenced to the main project.
  Delete "$INSTDIR\<$REFERENCEDASSEMBLY$>"

  Delete "$INSTDIR\Uninstall.exe"

  RMDir "$INSTDIR"
  
SectionEnd