; winbacula.nsi ; ; Written by Michel Meyers (michel@tcnnet.dyndns.org) ; ; Updated by Kern Sibbald for native Win32 Bacula ; ; 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" InstallDir "c:\bacula" ; ; Pull in pages ; !insertmacro MUI_PAGE_WELCOME ; !insertmacro MUI_PAGE_LICENSE "License.txt" !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" 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 baculas that could be running ExecWait '"$INSTDIR\bin\bacula-fd.exe" /kill' ; give it some time to shutdown Sleep 1000 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 ..\..\..\depkgs-win32\pthreads\pthreadVCE.dll File License.txt IfFileExists "$INSTDIR\bin\bacula-fd.conf" newconf File bacula-fd.conf goto do_service newconf: File /oname=bacula-fd.conf.new 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: ; Write the uninstall keys for Windows 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" ; 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 $INSTDIR\bin\bacula-fd.conf according to your requirements/installation! Also remember to put a shortcut into your start menu if you didn't install the client as a service." 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 NoStart Exec 'net start bacula' 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"' NoStart: SectionEnd Section "Install Documentation" SecDoc SetOutPath "$INSTDIR\doc" CreateDirectory "$INSTDIR\doc" File ..\..\doc\html-manual\*.html File ..\..\doc\html-manual\*.gif File ..\..\doc\html-manual\*.jpg SectionEnd ; ; Extra Page descriptions ; LangString DESC_SecService ${LANG_ENGLISH} "Install Bacula client on this system." LangString DESC_SecDoc ${LANG_ENGLISH} "Install Documenation on this system." !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${SecService} $(DESC_SecService) !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 files and uninstaller (preserving config for now) CopyFiles /SILENT "$INSTDIR\bin\bacula-fd.conf" "$INSTDIR\bacula-fd.conf" Delete /REBOOTOK "$INSTDIR\bin\*.*" Delete /REBOOTOK "$INSTDIR\doc\*.*" CopyFiles /SILENT "$INSTDIR\bacula-fd.conf" "$INSTDIR\bin\bacula-fd.conf" Delete /REBOOTOK "$INSTDIR\bacula-fd.conf" Delete /REBOOTOK "$INSTDIR\Uninstall.exe" ; Check for existing installation MessageBox MB_YESNO|MB_ICONQUESTION "Would you like to delete the current configuration file ($INSTDIR\bin\bacula-fd.conf)?" IDNO LeaveConfig Delete /REBOOTOK "$INSTDIR\bin\bacula-fd.conf" ; remove directories used RMDir "$INSTDIR\bin" RMDir "$INSTDIR\doc" RMDir "$INSTDIR\working" RMDir "$INSTDIR" RMDir "C:\tmp" LeaveConfig: SectionEnd ; eof