; winbacula.nsi ; ; Began as a version written by Michel Meyers (michel@tcnnet.dyndns.org) ; ; Adapted by Kern Sibbald for native Win32 Bacula ; added a number of elements from Christopher Hull's installer ; ; D. Scott Barninger Nov 13 2004 ; added configuration editing for bconsole.conf and wx-console.conf ; better explanation in dialog boxes for editing config files ; added Start Menu items ; fix uninstall of config files to do all not just bacula-fd.conf ; ; D. Scott Barninger Dec 05 2004 ; added specification of default permissions for bacula-fd.conf ; - thanks to Jamie Ffolliott for pointing me at cacls ; added removal of working-dir files if user selects to remove config ; uninstall is now 100% clean ; ; D. Scott Barninger Apr 17 2005 ; 1.36.3 release docs update ; add pdf manual and menu shortcut ; ; Command line options: ; ; /cygwin - do cygwin install into c:\cygwin\bacula ; /service - ; /start !define PRODUCT "Bacula" !define VERSION "@VERSION@" ; ; Include the Modern UI ; !include "MUI.nsh" !include "params.nsh" !include "util.nsh" ; ; Basics ; Name "Bacula Client" OutFile "winbacula-${VERSION}.exe" SetCompressor lzma InstallDir "c:\bacula" ; ; Pull in pages ; !insertmacro MUI_PAGE_WELCOME ; !insertmacro MUI_PAGE_LICENSE "..\..\LICENSE" !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH !insertmacro MUI_UNPAGE_WELCOME !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_UNPAGE_FINISH !define MUI_ABORTWARNING !insertmacro MUI_LANGUAGE "English" DirText "Setup will install the Bacula Client ${VERSION} to the directory specified below. To install in a different folder, click Browse and select another folder.$\n$\nNote to CYGWIN users: please choose your CYGWIN root directory." Section "Bacula File Service" SecService ; ; /cygwin on command line forces install dir to c:\cygwin\bacula (useful for silent install) ; Push "/cygwin" Call ParameterGiven Pop $6 StrCmp $6 0 NoCygwin StrCpy $INSTDIR "c:\cygwin\bacula" NoCygwin: ; IfFileExists "c:\cygwin\bin\cygwin1.dll" Cygwin ReallyNoCygwin ;Cygwin: ; StrCpy $INSTDIR "c:\cygwin\bacula" ;ReallyNoCygwin: ; Check for existing installation StrCpy $7 0 IfFileExists "$INSTDIR\bin\bacula-fd.conf" Upgrade NoUpgrade Upgrade: StrCpy $7 1 ; Shutdown any bacula that could be running ExecWait '"$INSTDIR\bin\bacula-fd.exe" /kill' ; give it some time to shutdown Sleep 3000 NoUpgrade: ; Set output path to the installation directory. SetOutPath "$INSTDIR\bin" CreateDirectory "$INSTDIR" CreateDirectory "$INSTDIR\bin" CreateDirectory "$INSTDIR\working" CreateDirectory "c:\tmp" ; Put files there File baculafd\Release\bacula-fd.exe File c:\windows\system32\msvcr71.dll File ..\..\..\depkgs-win32\pthreads\pthreadVCE.dll File ..\..\LICENSE Delete /REBOOTOK "$INSTDIR\bin\License.txt" IfFileExists "$INSTDIR\bin\bacula-fd.conf" newconf File baculafd\bacula-fd.conf goto do_service newconf: File /oname=bacula-fd.conf.new baculafd\bacula-fd.conf ; If /service was given jump to the service install part do_service: Push "/service" Call ParameterGiven Pop $5 StrCmp $5 1 Service ; If silent install and not /service don't ask questions and goto NoService... IfSilent NoService ; If already installed as service skip it too ReadRegDWORD $9 HKLM "Software\Bacula" "InstalledService" StrCmp $9 "1" NoService ; Install as service? MessageBox MB_YESNO|MB_ICONQUESTION "Do you want to install the Bacula Client as a service (automatically starts with your PC)?" IDNO NoService Service: ExecWait '"$INSTDIR\bin\bacula-fd.exe" /install' StrCpy $9 "1" WriteRegDWORD HKLM "Software\Bacula" "InstalledService" "1" NoService: ; Create Start Menu Directory SetShellVarContext all CreateDirectory "$SMPROGRAMS\Bacula" ; If not installed as service create Start Menu link StrCmp $9 "1" Uninstall CreateShortCut "$SMPROGRAMS\Bacula\Start Bacula Client.lnk" "$INSTDIR\bin\bacula-fd.exe" "-c $INSTDIR\bin\bacula-fd.conf" "$INSTDIR\bin\bacula-fd.exe" 0 Uninstall: ; Write the uninstall keys for Windows & create Start Menu entry WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "DisplayName" "Bacula Client" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "UninstallString" '"$INSTDIR\uninstall.exe"' WriteUninstaller "$INSTDIR\Uninstall.exe" CreateShortCut "$SMPROGRAMS\Bacula\Uninstall Bacula.lnk" "$INSTDIR\Uninstall.exe" "" "$INSTDIR\Uninstall.exe" 0 ; Create bacula-fd.conf and have the user edit it (skipped if silent) IfSilent NoReminder StrCmp $7 "1" NoReminder ; skip if it is an upgrade MessageBox MB_OK "Please edit the client configuration file $INSTDIR\bin\bacula-fd.conf to fit your installation. When you click the OK button Wordpad will open to allow you to do this. Be sure to save your changes before closing Wordpad." Exec 'write "$INSTDIR\bin\bacula-fd.conf"' ; spawn wordpad with the file to be edited NoReminder: ; Start the client? (default skipped if silent, use /start to force starting) Push "/start" Call ParameterGiven Pop $8 StrCmp $8 "1" Start IfSilent NoStart Call IsNt Pop $R0 StrCmp $R0 "false" do_win98 MessageBox MB_YESNO|MB_ICONQUESTION "Would you like to start the Bacula Client now?" IDNO SetPerms Exec 'net start bacula' Sleep 3000 SetPerms: ; set default permissions on config file so it's not world readable Exec 'cmd /C echo Y|cacls "$INSTDIR\bin\bacula-fd.conf" /G SYSTEM:F Administrators:F' goto NoStart do_win98: File Start.bat File Stop.bat MessageBox MB_YESNO|MB_ICONQUESTION "Would you like to start the Bacula Client now?" IDNO NoStart Start: Exec '"$INSTDIR\bin\bacula-fd.exe" -c "$INSTDIR\bin\bacula-fd.conf"' Sleep 3000 NoStart: SectionEnd Section "Install Console" SecConsole SetOutPath "$INSTDIR\bin" File console\Release\bconsole.exe IfFileExists "$INSTDIR\bin\pthreadVCE.dll" msvcr711 File ..\..\..\depkgs-win32\pthreads\pthreadVCE.dll msvcr711: IfFileExists "$INSTDIR\bin\msvcr71.dll" testconf1 File c:\windows\system32\msvcr71.dll testconf1: IfFileExists "$INSTDIR\bin\bconsole.conf" newconf File console\bconsole.conf goto do_next newconf: File /oname=bconsole.conf.new console\bconsole.conf do_next: ; Create bconsole.conf and have the user edit it (skipped if silent) IfSilent NoReminder StrCmp $7 "1" NoReminder ; skip if it is an upgrade MessageBox MB_OK "Please edit the command line console configuration file $INSTDIR\bin\bconsole.conf to fit your installation. When you click the OK button Wordpad will open to allow you to do this. Be sure to save your changes before closing Wordpad." Exec 'write "$INSTDIR\bin\bconsole.conf"' ; spawn wordpad with the file to be edited NoReminder: SectionEnd Section "Install wx-Console" SecWxConsole SetOutPath "$INSTDIR\bin" File wx-console\Release\wx-console.exe IfFileExists "$INSTDIR\bin\pthreadVCE.dll" msvcr712 File ..\..\..\depkgs-win32\pthreads\pthreadVCE.dll msvcr712: IfFileExists "$INSTDIR\bin\msvcr71.dll" testconf2 File c:\windows\system32\msvcr71.dll testconf2: IfFileExists "$INSTDIR\bin\wx-console.conf" newconf File wx-console\wx-console.conf goto do_next newconf: File /oname=wx-console.conf.new wx-console\wx-console.conf do_next: ; Create Start Menu entry SetShellVarContext all CreateShortCut "$SMPROGRAMS\Bacula\WX-Console.lnk" "$INSTDIR\bin\wx-console.exe" "-c $INSTDIR\bin\wx-console.conf" "$INSTDIR\bin\wx-console.exe" 0 ; Create wx-console.conf and have the user edit it (skipped if silent) IfSilent NoReminder StrCmp $7 "1" NoReminder ; skip if it is an upgrade MessageBox MB_OK "Please edit the WX-console configuration file $INSTDIR\bin\wx-console.conf to fit your installation. When you click the OK button Wordpad will open to allow you to do this. Be sure to save your changes before closing Wordpad." Exec 'write "$INSTDIR\bin\wx-console.conf"' ; spawn wordpad with the file to be edited NoReminder: SectionEnd Section "Install Documentation" SecDoc SetOutPath "$INSTDIR\doc" CreateDirectory "$INSTDIR\doc" File ..\..\..\docs\manual\bacula\*.html File ..\..\..\docs\manual\bacula\*.png File ..\..\..\docs\manual\bacula\*.css File ..\..\..\docs\manual\bacula.pdf ; Create Start Menu entry SetShellVarContext all CreateShortCut "$SMPROGRAMS\Bacula\Manual.lnk" "$INSTDIR\doc\bacula.pdf" SectionEnd ; ; Extra Page descriptions ; LangString DESC_SecService ${LANG_ENGLISH} "Install Bacula client on this system." LangString DESC_SecConsole ${LANG_ENGLISH} "Install Console program on this system." LangString DESC_SecWxConsole ${LANG_ENGLISH} "Install graphical console program on this system." LangString DESC_SecDoc ${LANG_ENGLISH} "Install Documentation on this system." !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${SecService} $(DESC_SecService) !insertmacro MUI_DESCRIPTION_TEXT ${SecConsole} $(DESC_SecConsole) !insertmacro MUI_DESCRIPTION_TEXT ${SecWxConsole} $(DESC_SecWxConsole) !insertmacro MUI_DESCRIPTION_TEXT ${SecDoc} $(DESC_SecDoc) !insertmacro MUI_FUNCTION_DESCRIPTION_END ; Uninstall section UninstallText "This will uninstall the Bacula Client. Hit next to continue." Section "Uninstall" ; Shutdown any baculum that could be running ExecWait '"$INSTDIR\bin\bacula-fd.exe" /kill' ReadRegDWORD $9 HKLM "Software\Bacula" "InstalledService" StrCmp $9 "" NoService ; Remove bacula service ExecWait '"$INSTDIR\bin\bacula-fd.exe" /remove' NoService: ; remove registry keys DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" DeleteRegKey HKLM "Software\Bacula" ; remove start menu items SetShellVarContext all Delete /REBOOTOK "$SMPROGRAMS\Bacula\*" ; remove files and uninstaller (preserving config for now) CopyFiles /SILENT "$INSTDIR\bin\bacula-fd.conf" "$INSTDIR\bacula-fd.conf" IfFileExists "$INSTDIR\bin\bconsole.conf" save_bconsole nosave_bconsole save_bconsole: CopyFiles /SILENT "$INSTDIR\bin\bconsole.conf" "$INSTDIR\bconsole.conf" nosave_bconsole: IfFileExists "$INSTDIR\bin\wx-console.conf" save_wxconsole nosave_wxconsole save_wxconsole: CopyFiles /SILENT "$INSTDIR\bin\wx-console.conf" "$INSTDIR\wx-console.conf" nosave_wxconsole: Delete /REBOOTOK "$INSTDIR\bin\*.*" Delete /REBOOTOK "$INSTDIR\doc\*.*" CopyFiles /SILENT "$INSTDIR\bacula-fd.conf" "$INSTDIR\bin\bacula-fd.conf" CopyFiles /SILENT "$INSTDIR\bconsole.conf" "$INSTDIR\bin\bconsole.conf" CopyFiles /SILENT "$INSTDIR\wx-console.conf" "$INSTDIR\bin\wx-console.conf" Delete /REBOOTOK "$INSTDIR\*.conf" Delete /REBOOTOK "$INSTDIR\Uninstall.exe" ; Check for existing installation MessageBox MB_YESNO|MB_ICONQUESTION "Would you like to delete the current configuration files and the working state file?" IDNO LeaveConfig Delete /REBOOTOK "$INSTDIR\bin\*.conf" Delete /REBOOTOK "$INSTDIR\working\*" ; remove directories used RMDir "$INSTDIR\bin" RMDir "$INSTDIR\doc" RMDir "$INSTDIR\working" RMDir "$INSTDIR" RMDir "C:\tmp" LeaveConfig: RMDir "$SMPROGRAMS\Bacula" SectionEnd ; eof