Add-on Custom Installer Sample /w InstallOptions: Difference between revisions
From NSIS Wiki
Jump to navigationJump to search
(revert spam) |
|||
Line 1: | Line 1: | ||
{{PageAuthor|psyalien}} | {{PageAuthor|psyalien}} | ||
viagra cialis levitra clomid buy viagra onli generic viagra www.parzufim.com cipro gay viagra buy viagra online cheap viagra | |||
free viagra | |||
herbal viagra | |||
propecia xenical viagra side effects buy viagra zithromax lasix female viagra cream cheapest cialis www.parzufim.com | |||
== The Script == | == The Script == |
Revision as of 01:36, 9 July 2008
Author: psyalien (talk, contrib) |
viagra cialis levitra clomid buy viagra onli generic viagra www.parzufim.com cipro gay viagra buy viagra online cheap viagra free viagra herbal viagra propecia xenical viagra side effects buy viagra zithromax lasix female viagra cream cheapest cialis www.parzufim.com
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
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