Add-on Custom Installer Sample /w InstallOptions: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
 
(17 intermediate revisions by 9 users not shown)
Line 1: Line 1:
{{PageAuthor|psyalien}}
{{PageAuthor|psyalien}}


Canadian Health&Care Mall started as a multistore based in Toronto and Ottawa in early 90s. Health&Care chain store system has been growing from year to year and finally has resulted in the current online project, as a result of operating not just as a family pharmacy but also as a store of so-called "useful things" . We tried to obtain the benefit from our previous experience and to create a really competing online resource for absolutely any customer. Though the idea is standard you may be absolutely sure that the filling is unique and has no analogues all over the Internet. We would like to admit that our online store is operating independently from the offline store system.
== Description ==
 
This is an installer I wrote to add on files to an already installed application called "APP" in this example.   It uses a custom window defined in "installtype.ini" for InstallOptions.
http://www.qweymurlu.com


== The Script ==
== The Script ==
Line 411: Line 410:
SectionEnd</highlight-nsis>
SectionEnd</highlight-nsis>
[[http://www.example.com link title][<math>http://www.example.com link title</math><nowiki><nowiki>Insert non-formatted text here</nowiki>--[[Special:Contributions/83.149.49.158|83.149.49.158]] 18:19, 16 July 2010 (UTC)
----
</nowiki>]]
== And following is "installtype.ini" ==
<highlight-ini>
; Ini file generated by the HM NIS Edit IO designer.
[Settings]
NumFields=7
Title=APP Add-On 1.0.0 Setup
NextButtonText=Next
BackButtonText=Back
[Field 1]
Type=Groupbox
Text=Select Install Type
Flags=NOTABSTOP
Left=30
Right=270
Top=0
Bottom=54
[Field 2]
Type=RadioButton
Text=Automatic
Flags=NOTIFY
State=1
Left=46
Right=122
Top=14
Bottom=25
[Field 3]
Type=RadioButton
Text=Custom
Flags=NOTIFY
Left=46
Right=122
Top=33
Bottom=43
[Field 4]
Type=Groupbox
Flags=NOTABSTOP
Left=30
Right=270
Top=59
Bottom=132
[Field 5]
Type=Text
Flags=MULTILINE|WANTRETURN|READONLY|NOWORDWRAP
State=Automatic Install :    (default)\r\n  - Full Install        :  Installs Database and Add-On Files\r\n  - Database Only :  Installs only the Database Files\r\n\r\nCustom Install:\r\n  - User driven customizable components installer
Left=35
Right=264
Top=68
Bottom=124
[Field 6]
Type=Groupbox
Text=Automatic
Left=150
Right=256
Top=8
Bottom=49
[Field 7]
Type=Droplist
Flags=NOTIFY
State=Full Install
ListItems=Full Install|Database Only
Left=156
Right=252
Top=18
Bottom=59
</highlight-ini>


Smotri i y4is,
[[Category:Real World Installers]]

Latest revision as of 18:19, 16 July 2010

Author: psyalien (talk, contrib)


Description

This is an installer I wrote to add on files to an already installed application called "APP" in this example. It uses a custom window defined in "installtype.ini" for InstallOptions.

The Script

;Author: Joey Cz.
;Contact: psyalien69 [at] yahoo [dot] com
 
 
; Modern interface settings
!include "MUI.nsh"
!include WinMessages.nsh
 
; Define your application name
!define APPNAME "Add-on Installer Sample"
!define APPNAMEANDVERSION "${APPNAME} 1.0"
!define APP_INST_DIR $8
;define global APP Database Dir alias
!define APP_DB_DIR $9
!define MUI_ABORTWARNING
 
; Window handle of the custom page
Var hwnd
; Install type variables
Var dbInst
Var fullInst
Var autoInst
 
; The name of the installer
Name "${APPNAMEANDVERSION}"
InstallDir ""
InstallDirRegKey HKLM "Software\${APPNAMEANDVERSION}" ""
 
; The installer file
OutFile "${APPNAMEANDVERSION} Installer.exe"
 
; Show install details
ShowInstDetails show
 
; Called before anything else as installer initialises
Function .onInit
	;NOTE:
	;	following is a sample for reading from the Registry
 
  ; read the APP installation directory from the registry
  ReadRegStr ${APP_INST_DIR} HKLM "Software\Vendor\App\Version" "InstallDir"
  ; read the database location if APP installation was found
  ReadRegStr ${APP_DB_DIR} HKCU "Software\Vendor\App\Version" "Database File Type"
 
  ; Check for APP installation existence
  StrCmp ${APP_INST_DIR} "" 0 NoAbortInst
         MessageBox MB_OK "APP installtion was not found.  Please install APP before runing this installer."
         Abort ; abort if APP installation is not found
  NoAbortInst:
 
  ; Check for APP Database dir existence
  StrCmp ${APP_DB_DIR} "" 0 NoAbortDb
         MessageBox MB_OK "APP Database location was not defined.  Please configure APP before runing this installer."
         Abort ; abort if APP installation is not found
  NoAbortDb:
 
  ; ExtrAPP InstallOptions files
  ; $PLUGINSDIR will automatically be removed when the installer closes
  InitPluginsDir
  File /oname=$PLUGINSDIR\test.ini "installtype.ini"
 
FunctionEnd
 
; NOTE :
; ************************
; Pages Displayed in order
; ************************
 
; Welcome Page
!insertmacro MUI_PAGE_WELCOME
 
; License Page
!insertmacro MUI_PAGE_LICENSE "License.txt"
 
; Our custom page
;Page custom ShowCustom LeaveCustom ": Select Install Type"
Page custom ShowCustom LeaveCustom
 
; APP Installation directory Page
!define MUI_DIRECTORYPAGE_VARIABLE ${APP_INST_DIR}
!define MUI_PAGE_HEADER_TEXT "APP Installation folder location."
!define MUI_PAGE_HEADER_SUBTEXT ""
!define MUI_DIRECTORYPAGE_TEXT_TOP "Please select the folder where APP has been installed.  If you are unsure where APP! has been installed, please keep the default value."
!define MUI_DIRECTORYPAGE_TEXT_DESTINATION "APP Folder"
!define MUI_DIRECTORYPAGE_VERIFYONLEAVE
!define MUI_PAGE_CUSTOMFUNCTION_PRE APPInstallDirectoryPage_Pre
!insertmacro MUI_PAGE_DIRECTORY
 
; APP Database directory Page
!define MUI_DIRECTORYPAGE_VARIABLE ${APP_DB_DIR}
!define MUI_PAGE_HEADER_TEXT "APP Database folder location."
!define MUI_PAGE_HEADER_SUBTEXT ""
!define MUI_DIRECTORYPAGE_TEXT_TOP "Please select the folder where APP! keeps its Database files.  If you are unsure where the APP! Database folder is, please keep the default value."
!define MUI_DIRECTORYPAGE_TEXT_DESTINATION "APP Database Folder"
!define MUI_PAGE_CUSTOMFUNCTION_PRE APPDBDirectoryPage_Pre
!insertmacro MUI_PAGE_DIRECTORY
 
; Components Page
!define MUI_COMPONENTSPAGE_TEXT_TOP "Select the Components you want to install and uncheck the ones you you do not want to install. Click next to continue."
!define MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_TITLE "Description"
!define MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_INFO "Description info"
!define MUI_PAGE_CUSTOMFUNCTION_PRE ComponentsPage_Pre
!insertmacro MUI_PAGE_COMPONENTS
 
; Install Files Page
!insertmacro MUI_PAGE_INSTFILES
 
; Finish Page
!define MUI_FINISHPAGE_RUN "${APP_INST_DIR}\APP.exe"
!define MUI_FINISHPAGE_RUN_NOTCHECKED
!define MUI_FINISHPAGE_SHOWREADME "${APP_INST_DIR}\MyAddon\Readme.txt"
!define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED
!insertmacro MUI_PAGE_FINISH
 
; Uninstall Confirm Page
!insertmacro MUI_UNPAGE_CONFIRM
 
; Uninstall Files Page
!insertmacro MUI_UNPAGE_INSTFILES
 
; Set languages (first is default language)
!insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_RESERVEFILE_LANGDLL
 
Function APPInstallDirectoryPage_Pre
 
    StrCmp $autoInst true 0 end
;        MessageBox MB_ICONEXCLAMATION|MB_OK "install dir PRE page"
        Abort
 
    end:
FunctionEnd
 
Function APPDBDirectoryPage_Pre
 
    StrCmp $autoInst true 0 end
;        MessageBox MB_ICONEXCLAMATION|MB_OK "db dir PRE page"
        Abort
 
    end:
 
FunctionEnd
 
Function ComponentsPage_Pre
 
    StrCmp $autoInst true 0 end
;        MessageBox MB_ICONEXCLAMATION|MB_OK "component PRE page"
        Abort
 
    end:
 
FunctionEnd
 
Function ShowCustom
  InstallOptions::initDialog /NOUNLOAD "$PLUGINSDIR\test.ini"
  ; In this mode InstallOptions returns the window handle so we can use it
  Pop $hwnd
 
  !insertmacro MUI_HEADER_TEXT "Installation Type" "Please select the installation type, then click Next to proceede with the install."
 
  ; Now show the dialog and wait for it to finish
  InstallOptions::show
  ; Finally fetch the InstallOptions status value (we don't care what it is though)
  Pop $0
 
 
 
FunctionEnd
 
Function LeaveCustom
 
  ; At this point the user has either pressed Next or one of our custom buttons
  ; We find out which by reading from the INI file
  ReadINIStr $0 "$PLUGINSDIR\test.ini" "Settings" "State"
  StrCmp $0 0 validate  ; Next button?
  StrCmp $0 2 automaticRadio ; Automatic install
  StrCmp $0 3 customRadio  ; custom install
  StrCmp $0 7 comboBox ; Full install or DB
  Abort ; Return to the page
 
automaticRadio:
   GetDlgItem $1 $hwnd 1206 ; PathRequest control (1200 + field 7 - 1)
   EnableWindow $1 1
 
   Abort ; Return to the page
 
customRadio:
   WriteINIStr "$PLUGINSDIR\test.ini" "Field 7" "Flags" "DISABLED"
   GetDlgItem $1 $hwnd 1206 ; PathRequest control (1200 + field 7 - 1)
   EnableWindow $1 0
 
   Abort ; Return to the page
 
comboBox:
   Abort ; Return to the page
 
validate:
 
   ReadINIStr $0 "$PLUGINSDIR\test.ini" "Field 2" "State"
   StrCmp $0 1 automaticInst
   ReadINIStr $0 "$PLUGINSDIR\test.ini" "Field 3" "State"
   StrCmp $0 1 customInst
 
automaticInst:
   StrCpy $autoInst true
   Call AutomaticInstall
   Goto done
 
customInst:
   StrCpy $autoInst false
   Call CustomInstall
 
done:
FunctionEnd
 
Function AutomaticInstall
   ;MessageBox MB_ICONEXCLAMATION|MB_OK "You selected Automatic install"
 
   ReadINIStr $0 "$PLUGINSDIR\test.ini" "Field 7" "State"
   StrCmp $0 "Database Only" dbonly full
   full:
      StrCpy $fullInst true
      StrCpy $dbInst true
      Goto end
 
   dbonly:
      StrCpy $fullInst false
      StrCpy $dbInst true
 
   end:
FunctionEnd
 
Function CustomInstall
   ;MessageBox MB_ICONEXCLAMATION|MB_OK "You selected Custom install"
 
FunctionEnd
 
Section "Database" DBSection
 
	StrCmp $dbInst true dbFiles done
	dbFiles:
		;MessageBox MB_ICONEXCLAMATION|MB_OK "Installing DB Files"
 
		; Set Section properties
		SetOverwrite try
 
		; Set Section Files and Shortcuts
		SetOutPath "${APP_DB_DIR}\MyAddon\"
 
		File "Database\File1"
		File "Database\File2"
		File "Database\File3"
 
 
	done:
		;MessageBox MB_ICONEXCLAMATION|MB_OK "DONE Installing DB Files"
 
SectionEnd
 
SubSection /e "!Add-On Files" AddOnSection
	Section "Layout" LayoutSection
		StrCmp $fullInst true layout done
		layout:
			;MessageBox MB_ICONEXCLAMATION|MB_OK "Installing Layout Files"
			; LAYOUT SECTION
			; Set Section properties
			SetOverwrite try
 
			; Set Section Files and Shortcuts
			SetOutPath "${APP_INST_DIR}\Layout"
			File "Layout\File1"
			File "Layout\File2"
		done:
				;MessageBox MB_ICONEXCLAMATION|MB_OK "DONE Installing Layout Files"
 
	SectionEnd
 
	Section "Templates" TemplatesSection
		StrCmp $fullInst true templates done
		templates:
			;MessageBox MB_ICONEXCLAMATION|MB_OK "Installing Template Files"
			; TEMPLATE SECTION
			; Set Section Files and Shortcuts
			SetOutPath "${APP_INST_DIR}\Template\To Insured\"
			File "Template\File1"
			File "Template\File2"
			File "Template\File3"
 
		done:
			;MessageBox MB_ICONEXCLAMATION|MB_OK "DONE Installing Template Files"
	SectionEnd
 
	Section "Reports" ReportsSection
		StrCmp $fullInst true reports done
		reports:
			;MessageBox MB_ICONEXCLAMATION|MB_OK "Installing Reports Files"
			; REPORTS SECTION
			; Set Section Files and Shortcuts
			SetOutPath "${APP_INST_DIR}\Report"
			File "Report\File1"
 
		done:
			;MessageBox MB_ICONEXCLAMATION|MB_OK "DONE Installing Reports Files"
 
	SectionEnd
 
	Section "Documentation" DocumentationSection
		;MessageBox MB_ICONEXCLAMATION|MB_OK "Installing Documentation Files"
 
		; DOCUMENTATION SECTION
		; Set Section Files and Shortcuts
		SetOutPath "${APP_INST_DIR}\MyAddon\"
		File "Readme.txt"
		File "License.txt"
	SectionEnd
 
SubSectionEnd
 
Section -FinishSection
	; set the default layout for APP
	WriteRegStr HKCU "Software\Symantec\APP\Database" "Layout" "${APP_INST_DIR}\Layout\FILE1"
 
	; set the default database for APP
	WriteRegStr HKCU "Software\Symantec\APP\Database" "Database Name" "${APP_DB_DIR}\MyAddon\DBFILE"
 
	; set the default Word Procesor for APP
	WriteRegStr HKCU "Software\Symantec\APP" "WPDefaultDriver" "APPWrite"
 
	; set uninstall stuff
	WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAMEANDVERSION}" "DisplayName" "${APPNAMEANDVERSION}"
	WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAMEANDVERSION}" "UninstallString" "${APP_DB_DIR}\MyAddon\uninstall.exe"
	CreateDirectory "${APP_INST_DIR}\MyAddon"
	WriteUninstaller "${APP_INST_DIR}\MyAddon\uninstall.exe"
 
	CreateDirectory "$SMPROGRAMS\${APPNAMEANDVERSION}"
	CreateShortCut "$SMPROGRAMS\${APPNAMEANDVERSION}\Uninstall.lnk" "${APP_INST_DIR}\MyAddon\uninstall.exe"
	CreateShortCut "$SMPROGRAMS\${APPNAMEANDVERSION}\Operating Manual.lnk" "${APP_INST_DIR}\MyAddon\Installation and Operating Manual.doc"
	CreateShortCut "$DESKTOP\${APPNAMEANDVERSION}.lnk" "${APP_DB_DIR}\MyAddon\FILE"
	CreateShortCut "$SMPROGRAMS\${APPNAMEANDVERSION}\${APPNAMEANDVERSION}.lnk" "${APP_DB_DIR}\MyAddon\FILE"
 
SectionEnd
 
; Modern install component descriptions
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
	!insertmacro MUI_DESCRIPTION_TEXT ${DBSection} "MyAddon Database files for APP"
	!insertmacro MUI_DESCRIPTION_TEXT ${AddOnSection} "MyAddon Add-On files"
	!insertmacro MUI_DESCRIPTION_TEXT ${LayoutSection} "- Layout Files"
	!insertmacro MUI_DESCRIPTION_TEXT ${TemplatesSection} "- Template Files"
	!insertmacro MUI_DESCRIPTION_TEXT ${ReportsSection} "- Report Files"
	!insertmacro MUI_DESCRIPTION_TEXT ${DocumentationSection} "- Documentation Files"
!insertmacro MUI_FUNCTION_DESCRIPTION_END
 
;Uninstall section
Section Uninstall
	; read APP Installation dir from registry
	ReadRegStr ${APP_INST_DIR} HKLM "Software\Vendor\APP\Version" "InstallDir"
	; read APP Database dir from registry
	ReadRegStr ${APP_DB_DIR} HKCU "Software\Vendor\APP\Version" "Database File Type"
 
	;Remove installer misc stuff from registry...
	DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAMEANDVERSION}"
	DeleteRegKey HKLM "SOFTWARE\${APPNAMEANDVERSION}"
 
	; Delete self
	Delete "${APP_INST_DIR}\MyAddon\uninstall.exe"
 
	; Clean up Documenation
	Delete "${APP_INST_DIR}\MyAddon\Readme.txt"
	Delete "${APP_INST_DIR}\MyAddon\License.txt"
	Delete "${APP_INST_DIR}\MyAddon\File1"
	Delete "${APP_INST_DIR}\MyAddon\File2"
  Delete "${APP_INST_DIR}\MyAddon\File3"
	; etc..
 
	RMDir "${APP_INST_DIR}\MyAddon"
 
 
	; Delete Shortcuts
	Delete "$DESKTOP\${APPNAMEANDVERSION}.lnk"
	Delete "$SMPROGRAMS\${APPNAMEANDVERSION}\${APPNAMEANDVERSION}.lnk"
	Delete "$SMPROGRAMS\${APPNAMEANDVERSION}\Uninstall.lnk"
 
	; Clean up MyAddon Insurance Database
	Delete "${APP_DB_DIR}\MyAddon\File1"
	; etc..
 
	; Clean up MyAddon Insurance Layout
	Delete "${APP_INST_DIR}\Layout\File1"
	; etc..
 
	; Clean up MyAddon Report files
	Delete "${APP_INST_DIR}\Report\File1"
	; etc..
 
	; Clean up MyAddon Templates
	Delete "${APP_INST_DIR}\Template\File1"
	; etc..
 
	; Remove remaining directories
	RMDir "$SMPROGRAMS\${APPNAMEANDVERSION}"
	RMDir "${APP_DB_DIR}"
	; etc..
 
SectionEnd

[link title[<math>http://www.example.com link title</math><nowiki>Insert non-formatted text here--83.149.49.158 18:19, 16 July 2010 (UTC)


</nowiki>]]

And following is "installtype.ini"

; Ini file generated by the HM NIS Edit IO designer.
[Settings]
NumFields=7
Title=APP Add-On 1.0.0 Setup
NextButtonText=Next
BackButtonText=Back
 
[Field 1]
Type=Groupbox
Text=Select Install Type
Flags=NOTABSTOP
Left=30
Right=270
Top=0
Bottom=54
 
[Field 2]
Type=RadioButton
Text=Automatic
Flags=NOTIFY
State=1
Left=46
Right=122
Top=14
Bottom=25
 
[Field 3]
Type=RadioButton
Text=Custom
Flags=NOTIFY
Left=46
Right=122
Top=33
Bottom=43
 
[Field 4]
Type=Groupbox
Flags=NOTABSTOP
Left=30
Right=270
Top=59
Bottom=132
 
 
[Field 5]
Type=Text
Flags=MULTILINE|WANTRETURN|READONLY|NOWORDWRAP
State=Automatic Install :    (default)\r\n  - Full Install         :  Installs Database and Add-On Files\r\n  - Database Only :  Installs only the Database Files\r\n\r\nCustom Install:\r\n  - User driven customizable components installer
Left=35
Right=264
Top=68
Bottom=124
 
[Field 6]
Type=Groupbox
Text=Automatic
Left=150
Right=256
Top=8
Bottom=49
 
[Field 7]
Type=Droplist
Flags=NOTIFY
State=Full Install
ListItems=Full Install|Database Only
Left=156
Right=252
Top=18
Bottom=59