]> git.sur5r.net Git - bacula/bacula/commitdiff
Update full Win32 installer
authorKern Sibbald <kern@sibbald.com>
Fri, 22 Jan 2010 17:10:28 +0000 (18:10 +0100)
committerKern Sibbald <kern@sibbald.com>
Fri, 22 Jan 2010 17:10:28 +0000 (18:10 +0100)
bacula/src/win32/full_win32_installer/InstallType.nsh
bacula/src/win32/full_win32_installer/bat.conf.in [new file with mode: 0644]
bacula/src/win32/full_win32_installer/winbacula.nsi

index 396f88bf8188d8a2c0d72c2104431a62fec104e5..373f68cce1bf611366c2deffd7f92e3a3019df10 100644 (file)
@@ -63,6 +63,9 @@ Function EnterInstallType
     ${If} ${FileExists} "$R1\bconsole.conf"
       IntOp $PreviousComponents $PreviousComponents | ${ComponentTextConsole}
     ${EndIf}
+    ${If} ${FileExists} "$R1\bat.conf"
+      IntOp $PreviousComponents $PreviousComponents | ${ComponentBatConsole}
+    ${EndIf}
     ${If} ${FileExists} "$R1\wx-console.conf"
       IntOp $PreviousComponents $PreviousComponents | ${ComponentGUIConsole}
     ${EndIf}
diff --git a/bacula/src/win32/full_win32_installer/bat.conf.in b/bacula/src/win32/full_win32_installer/bat.conf.in
new file mode 100644 (file)
index 0000000..7f0b5f1
--- /dev/null
@@ -0,0 +1,10 @@
+#
+# Bacula Administration Tool (bat) Configuration File
+#
+
+Director {
+  Name = @director_name@
+  DIRport = @director_port@
+  address = @director_address@
+  Password = "@director_password@"
+}
index 7cac72b04f8c5596d4f1f497e15c152528938501..700dff63160241661bd20738a04c2ad9e37122f8 100644 (file)
-; winbacula.nsi\r
-;\r
-; Began as a version written by Michel Meyers (michel@tcnnet.dyndns.org)\r
-;\r
-; Adapted by Kern Sibbald for native Win32 Bacula\r
-;    added a number of elements from Christopher Hull's installer\r
-;\r
-; D. Scott Barninger Nov 13 2004\r
-; added configuration editing for bconsole.conf and bwx-console.conf\r
-; better explanation in dialog boxes for editing config files\r
-; added Start Menu items\r
-; fix uninstall of config files to do all not just bacula-fd.conf\r
-;\r
-; D. Scott Barninger Dec 05 2004\r
-; added specification of default permissions for bacula-fd.conf\r
-;   - thanks to Jamie Ffolliott for pointing me at cacls\r
-; added removal of working-dir files if user selects to remove config\r
-; uninstall is now 100% clean\r
-;\r
-; D. Scott Barninger Apr 17 2005\r
-; 1.36.3 release docs update\r
-; add pdf manual and menu shortcut\r
-;\r
-; Robert Nelson May 15 2006\r
-; Added server installs and implemented Microsoft install locations\r
-; Use LogicLib.nsh\r
-; Added Bacula-SD and Bacula-DIR\r
-; Replaced ParameterGiven with standard GetOptions\r
-;\r
-; Version $Id$\r
-;\r
-; Command line options:\r
-;\r
-; /service    - \r
-; /start\r
-;\r
-; netsh firewall add portopening protocol=tcp port=9102 name="Bacula-FD"\r
-\r
-\r
-!define PRODUCT "Bacula"\r
-\r
-;\r
-; Include the Modern UI\r
-;\r
-\r
-!include "MUI.nsh"\r
-!include "LogicLib.nsh"\r
-!include "FileFunc.nsh"\r
-!include "Sections.nsh"\r
-!include "StrFunc.nsh"\r
-!include "WinMessages.nsh"\r
-;\r
-; Basics\r
-;\r
-Name "Bacula"\r
-OutFile "${OUT_DIR}\winbacula-${VERSION}.exe"\r
-SetCompressor lzma\r
-InstallDir "$PROGRAMFILES\Bacula"\r
-InstallDirRegKey HKLM "Software\Bacula" "InstallLocation"\r
-\r
-InstType "Client"\r
-InstType "Server"\r
-InstType "Full"\r
-\r
-!insertmacro GetParent\r
-\r
-${StrCase}\r
-${StrRep}\r
-${StrTok}\r
-${StrTrimNewLines}\r
-\r
-;\r
-; Pull in pages\r
-;\r
-\r
-!define      MUI_COMPONENTSPAGE_SMALLDESC\r
-\r
-!define      MUI_HEADERIMAGE\r
-!define      MUI_BGCOLOR                739AB9\r
-!define      MUI_HEADERIMAGE_BITMAP     "bacula-logo.bmp"\r
-\r
-!InsertMacro MUI_PAGE_WELCOME\r
-!InsertMacro MUI_PAGE_LICENSE "..\..\..\LICENSE"\r
-Page custom EnterInstallType\r
-!define      MUI_PAGE_CUSTOMFUNCTION_SHOW PageComponentsShow\r
-!InsertMacro MUI_PAGE_COMPONENTS\r
-!define      MUI_PAGE_CUSTOMFUNCTION_PRE PageDirectoryPre\r
-!InsertMacro MUI_PAGE_DIRECTORY\r
-Page custom EnterConfigPage1 LeaveConfigPage1\r
-Page custom EnterConfigPage2 LeaveConfigPage2\r
-!Define      MUI_PAGE_CUSTOMFUNCTION_LEAVE LeaveInstallPage\r
-!InsertMacro MUI_PAGE_INSTFILES\r
-Page custom EnterWriteTemplates\r
-!Define      MUI_FINISHPAGE_SHOWREADME $INSTDIR\Readme.txt\r
-!InsertMacro MUI_PAGE_FINISH\r
-\r
-!InsertMacro MUI_UNPAGE_WELCOME\r
-!InsertMacro MUI_UNPAGE_CONFIRM\r
-!InsertMacro MUI_UNPAGE_INSTFILES\r
-!InsertMacro MUI_UNPAGE_FINISH\r
-\r
-!define      MUI_ABORTWARNING\r
-\r
-!InsertMacro MUI_LANGUAGE "English"\r
-\r
-!InsertMacro GetParameters\r
-!InsertMacro GetOptions\r
-\r
-DirText "Setup will install Bacula ${VERSION} to the directory specified below. To install in a different folder, click Browse and select another folder."\r
-\r
-!InsertMacro MUI_RESERVEFILE_INSTALLOPTIONS\r
-;\r
-; Global Variables\r
-;\r
-Var OptService\r
-Var OptStart\r
-Var OptSilent\r
-\r
-Var CommonFilesDone\r
-\r
-Var OsIsNT\r
-\r
-Var HostName\r
-\r
-Var ConfigClientName\r
-Var ConfigClientPort\r
-Var ConfigClientMaxJobs\r
-Var ConfigClientPassword\r
-Var ConfigClientInstallService\r
-Var ConfigClientStartService\r
-\r
-Var ConfigStorageName\r
-Var ConfigStoragePort\r
-Var ConfigStorageMaxJobs\r
-Var ConfigStoragePassword\r
-Var ConfigStorageInstallService\r
-Var ConfigStorageStartService\r
-\r
-Var ConfigDirectorName\r
-Var ConfigDirectorPort\r
-Var ConfigDirectorMaxJobs\r
-Var ConfigDirectorPassword\r
-Var ConfigDirectorAddress\r
-Var ConfigDirectorMailServer\r
-Var ConfigDirectorMailAddress\r
-Var ConfigDirectorDB\r
-Var ConfigDirectorInstallService\r
-Var ConfigDirectorStartService\r
-\r
-Var ConfigMonitorName\r
-Var ConfigMonitorPassword\r
-\r
-Var LocalDirectorPassword\r
-Var LocalHostAddress\r
-\r
-Var MySQLPath\r
-Var MySQLVersion\r
-Var PostgreSQLPath\r
-Var PostgreSQLVersion\r
-\r
-Var AutomaticInstall\r
-Var InstallType\r
-!define NewInstall      0\r
-!define UpgradeInstall  1\r
-!define MigrateInstall  2\r
-\r
-Var OldInstallDir\r
-Var PreviousComponents\r
-Var NewComponents\r
-\r
-; Bit 0 = File Service\r
-;     1 = Storage Service\r
-;     2 = Director Service\r
-;     3 = Command Console\r
-;     4 = Graphical Console\r
-;     5 = Documentation (PDF)\r
-;     6 = Documentation (HTML)\r
-\r
-!define ComponentFile                   1\r
-!define ComponentStorage                2\r
-!define ComponentDirector               4\r
-!define ComponentTextConsole            8\r
-!define ComponentGUIConsole             16\r
-!define ComponentPDFDocs                32\r
-!define ComponentHTMLDocs               64\r
-\r
-!define ComponentsRequiringUserConfig           31\r
-!define ComponentsFileAndStorage                3\r
-!define ComponentsFileAndStorageAndDirector     7\r
-!define ComponentsDirectorAndTextGuiConsoles    28\r
-!define ComponentsTextAndGuiConsoles            24\r
-\r
-Var HDLG\r
-Var HCTL\r
-\r
-Function .onInit\r
-  Push $R0\r
-  Push $R1\r
-\r
-  ; Process Command Line Options\r
-  StrCpy $OptService 1\r
-  StrCpy $OptStart 1\r
-  StrCpy $OptSilent 0\r
-  StrCpy $CommonFilesDone 0\r
-  StrCpy $OsIsNT 0\r
-  StrCpy $AutomaticInstall 0\r
-  StrCpy $InstallType ${NewInstall}\r
-  StrCpy $OldInstallDir ""\r
-  StrCpy $PreviousComponents 0\r
-  StrCpy $NewComponents 0\r
-  StrCpy $MySQLPath ""\r
-  StrCpy $MySQLVersion ""\r
-  StrCpy $PostgreSQLPath ""\r
-  StrCpy $PostgreSQLVersion ""\r
-\r
-  ${GetParameters} $R0\r
-\r
-  ClearErrors\r
-  ${GetOptions} $R0 "/noservice" $R1\r
-  IfErrors +2\r
-    StrCpy $OptService 0\r
-\r
-  ClearErrors\r
-  ${GetOptions} $R0 "/nostart" $R1\r
-  IfErrors +2\r
-    StrCpy $OptStart 0\r
-\r
-  IfSilent 0 +2\r
-    StrCpy $OptSilent 1\r
-\r
-  ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion\r
-  ${If} $R0 != ""\r
-    StrCpy $OsIsNT 1\r
-  ${EndIf}\r
-\r
-  Call GetComputerName\r
-  Pop $HostName\r
-\r
-  Call GetHostName\r
-  Pop $LocalHostAddress\r
-\r
-  Call GetUserName\r
-  Pop $ConfigDirectorMailAddress\r
-\r
-  Call FindDatabaseApps\r
-\r
-  ; Configuration Defaults\r
-\r
-  StrCpy $ConfigClientName               "$HostName-fd"\r
-  StrCpy $ConfigClientPort               9102\r
-  StrCpy $ConfigClientMaxJobs            5\r
-  ;StrCpy $ConfigClientPassword\r
-  StrCpy $ConfigClientInstallService     "$OptService"\r
-  StrCpy $ConfigClientStartService       "$OptStart"\r
-\r
-  StrCpy $ConfigStorageName              "$HostName-sd"\r
-  StrCpy $ConfigStoragePort              9103\r
-  StrCpy $ConfigStorageMaxJobs           10\r
-  ;StrCpy $ConfigStoragePassword\r
-  StrCpy $ConfigStorageInstallService    "$OptService"\r
-  StrCpy $ConfigStorageStartService      "$OptStart"\r
-\r
-  ;StrCpy $ConfigDirectorName            "$HostName-dir"\r
-  StrCpy $ConfigDirectorPort             9101\r
-  StrCpy $ConfigDirectorMaxJobs          1\r
-  ;StrCpy $ConfigDirectorPassword\r
-  StrCpy $ConfigDirectorDB               0\r
-  StrCpy $ConfigDirectorInstallService   "$OptService"\r
-  StrCpy $ConfigDirectorStartService     "$OptStart"\r
-\r
-  StrCpy $ConfigMonitorName              "$HostName-mon"\r
-  ;StrCpy $ConfigMonitorPassword\r
-\r
-  InitPluginsDir\r
-  File "/oname=$PLUGINSDIR\openssl.exe"  "${SRC_DIR}\openssl.exe"\r
-  File "/oname=$PLUGINSDIR\libeay32.dll" "${SRC_DIR}\libeay32.dll"\r
-  File "/oname=$PLUGINSDIR\ssleay32.dll" "${SRC_DIR}\ssleay32.dll"\r
-  File "/oname=$PLUGINSDIR\sed.exe"      "${SRC_DIR}\sed.exe"\r
-\r
-  !InsertMacro MUI_INSTALLOPTIONS_EXTRACT "InstallType.ini"\r
-  !InsertMacro MUI_INSTALLOPTIONS_EXTRACT "WriteTemplates.ini"\r
-\r
-  SetPluginUnload alwaysoff\r
-\r
-  nsExec::Exec '"$PLUGINSDIR\openssl.exe" rand -base64 -out $PLUGINSDIR\pw.txt 33'\r
-  pop $R0\r
-  ${If} $R0 = 0\r
-   FileOpen $R1 "$PLUGINSDIR\pw.txt" r\r
-   IfErrors +4\r
-     FileRead $R1 $R0\r
-     ${StrTrimNewLines} $ConfigClientPassword $R0\r
-     FileClose $R1\r
-  ${EndIf}\r
-\r
-  nsExec::Exec '"$PLUGINSDIR\openssl.exe" rand -base64 -out $PLUGINSDIR\pw.txt 33'\r
-  pop $R0\r
-  ${If} $R0 = 0\r
-   FileOpen $R1 "$PLUGINSDIR\pw.txt" r\r
-   IfErrors +4\r
-     FileRead $R1 $R0\r
-     ${StrTrimNewLines} $ConfigStoragePassword $R0\r
-     FileClose $R1\r
-  ${EndIf}\r
-\r
-  nsExec::Exec '"$PLUGINSDIR\openssl.exe" rand -base64 -out $PLUGINSDIR\pw.txt 33'\r
-  pop $R0\r
-  ${If} $R0 = 0\r
-   FileOpen $R1 "$PLUGINSDIR\pw.txt" r\r
-   IfErrors +4\r
-     FileRead $R1 $R0\r
-     ${StrTrimNewLines} $LocalDirectorPassword $R0\r
-     FileClose $R1\r
-  ${EndIf}\r
-\r
-  SetPluginUnload manual\r
-\r
-  nsExec::Exec '"$PLUGINSDIR\openssl.exe" rand -base64 -out $PLUGINSDIR\pw.txt 33'\r
-  pop $R0\r
-  ${If} $R0 = 0\r
-   FileOpen $R1 "$PLUGINSDIR\pw.txt" r\r
-   IfErrors +4\r
-     FileRead $R1 $R0\r
-     ${StrTrimNewLines} $ConfigMonitorPassword $R0\r
-     FileClose $R1\r
-  ${EndIf}\r
-\r
-  Pop $R1\r
-  Pop $R0\r
-FunctionEnd\r
-\r
-Function .onSelChange\r
-  Call UpdateComponentUI\r
-FunctionEnd\r
-\r
-Function InstallCommonFiles\r
-  ${If} $CommonFilesDone = 0\r
-    SetOutPath "$INSTDIR"\r
-    File "Readme.txt"\r
-\r
-    SetOutPath "$INSTDIR\bin"\r
-!if "${BUILD_TOOLS}" == "VC8"\r
-    File "${SRC_DIR}\msvcm80.dll"\r
-    File "${SRC_DIR}\msvcp80.dll"\r
-    File "${SRC_DIR}\msvcr80.dll"\r
-    File "${SRC_DIR}\Microsoft.VC80.CRT.manifest"\r
-    File "${SRC_DIR}\pthreadVCE.dll"\r
-!endif\r
-!if "${BUILD_TOOLS}" == "VC8_DEBUG"\r
-    File "${SRC_DIR}\msvcm80.dll"\r
-    File "${SRC_DIR}\msvcp80.dll"\r
-    File "${SRC_DIR}\msvcr80.dll"\r
-    File "${SRC_DIR}\Microsoft.VC80.CRT.manifest"\r
-    File "${SRC_DIR}\msvcm80d.dll"\r
-    File "${SRC_DIR}\msvcp80d.dll"\r
-    File "${SRC_DIR}\msvcr80d.dll"\r
-    File "${SRC_DIR}\Microsoft.VC80.DebugCRT.manifest"\r
-    File "${SRC_DIR}\pthreadVCE.dll"\r
-!endif\r
-!if "${BUILD_TOOLS}" == "MinGW"\r
-    File "${SRC_DIR}\mingwm10.dll"\r
-    File "${SRC_DIR}\pthreadGCE.dll"\r
-!endif\r
-    File "${SRC_DIR}\libeay32.dll"\r
-    File "${SRC_DIR}\ssleay32.dll"\r
-    File "${SRC_DIR}\zlib1.dll"\r
-!if "${BUILD_TOOLS}" == "VC8"\r
-    File "${SRC_DIR}\zlib1.dll.manifest"\r
-!endif\r
-!If "${BUILD_TOOLS}" == "VC8_DEBUG"\r
-    File "${SRC_DIR}\zlib1.dll.manifest"\r
-!endif\r
-    File "/oname=$INSTDIR\openssl.cnf" "${SRC_DIR}\openssl.cnf"\r
-    File "${SRC_DIR}\openssl.exe"\r
-    File "${SRC_DIR}\bsleep.exe"\r
-    File "${SRC_DIR}\bsmtp.exe"\r
-    File "${SRC_DIR}\bacula.dll"\r
-    File "${SRC_DIR}\expr64.exe"\r
-    File "${SRC_DIR}\snooze.exe"\r
-\r
-    CreateShortCut "$SMPROGRAMS\Bacula\Documentation\View Readme.lnk" "write.exe" '"$INSTDIR\Readme.txt"'\r
-\r
-    StrCpy $CommonFilesDone 1\r
-  ${EndIf}\r
-FunctionEnd\r
-\r
-Section "-Initialize"\r
-  ${If} $MySQLPath != ""\r
-    DetailPrint "Found MySQL (version $MySQLVersion)"\r
-  ${EndIf}\r
-  ${If} $PostgreSQLPath != ""\r
-    DetailPrint "Found PostgreSQL (version $PostgreSQLVersion)"\r
-  ${EndIf}\r
-\r
-  WriteRegStr   HKLM Software\Bacula InstallLocation "$INSTDIR"\r
-\r
-  Call GetSelectedComponents\r
-  Pop $R2\r
-  WriteRegDWORD HKLM Software\Bacula Components $R2\r
-\r
-  WriteRegDWORD HKLM Software\Bacula Database $ConfigDirectorDB\r
-\r
-  ; remove start menu items\r
-  SetShellVarContext all\r
-\r
-  Delete /REBOOTOK "$SMPROGRAMS\Bacula\Configuration\*"\r
-  Delete /REBOOTOK "$SMPROGRAMS\Bacula\Documentation\*"\r
-  Delete /REBOOTOK "$SMPROGRAMS\Bacula\*"\r
-  RMDir "$SMPROGRAMS\Bacula\Configuration"\r
-  RMDir "$SMPROGRAMS\Bacula\Documentation"\r
-  RMDir "$SMPROGRAMS\Bacula"\r
-  CreateDirectory "$SMPROGRAMS\Bacula"\r
-  CreateDirectory "$SMPROGRAMS\Bacula\Configuration"\r
-  CreateDirectory "$SMPROGRAMS\Bacula\Documentation"\r
-\r
-  CreateDirectory "$INSTDIR"\r
-  CreateDirectory "$INSTDIR\bin"\r
-  CreateDirectory "$APPDATA\Bacula"\r
-  CreateDirectory "$APPDATA\Bacula\Work"\r
-  CreateDirectory "$APPDATA\Bacula\Spool"\r
-\r
-  SetOutPath "$INSTDIR"\r
-  File "..\..\..\LICENSE"\r
-  Delete /REBOOTOK "$INSTDIR\bin\License.txt"\r
-\r
-  FileOpen $R1 $PLUGINSDIR\config.sed w\r
-  FileWrite $R1 "s;@VERSION@;${VERSION};g$\r$\n"\r
-  FileWrite $R1 "s;@DATE@;${__DATE__};g$\r$\n"\r
-  FileWrite $R1 "s;@DISTNAME@;Windows;g$\r$\n"\r
-\r
-!If "$BUILD_TOOLS" == "MinGW"\r
-  StrCpy $R2 "MinGW32"\r
-!Else\r
-  StrCpy $R2 "MVS"\r
-!EndIf\r
-\r
-  Call GetHostName\r
-  Exch $R3\r
-  Pop $R3\r
-\r
-  FileWrite $R1 "s;@DISTVER@;$R2;g$\r$\n"\r
-\r
-  ${StrRep} $R2 "$APPDATA\Bacula\Work" "\" "\\\\"\r
-  FileWrite $R1 's;@working_dir@;$R2;g$\r$\n'\r
-  ${StrRep} $R2 "$APPDATA\Bacula\Work" "\" "\\"\r
-  FileWrite $R1 's;@working_dir_cmd@;$R2;g$\r$\n'\r
-\r
-  ${StrRep} $R2 "$INSTDIR\bin" "\" "\\\\"\r
-  FileWrite $R1 's;@bin_dir@;$R2;g$\r$\n'\r
-  ${StrRep} $R2 "$INSTDIR\bin" "\" "\\"\r
-  FileWrite $R1 's;@bin_dir_cmd@;$R2;g$\r$\n'\r
-\r
-  ${StrRep} $R2 "$INSTDIR\bin\fdplugins" "\" "\\\\"\r
-  FileWrite $R1 's;@fdplugins_dir@;$R2;g$\r$\n'\r
-\r
-  ${StrRep} $R2 "$INSTDIR" "\" "/"\r
-  FileWrite $R1 "s;@BUILD_DIR@;$R2;g$\r$\n"\r
-\r
-  Call IsDirectorSelected\r
-  Pop $R2\r
-  ${If} $R2 = 1\r
-    FileWrite $R1 "s;@director_address@;$LocalHostAddress;g$\r$\n"\r
-  ${Else}\r
-    ${If} "$ConfigDirectorAddress" != ""\r
-      FileWrite $R1 "s;@director_address@;$ConfigDirectorAddress;g$\r$\n"\r
-    ${EndIf}\r
-  ${EndIf}\r
-\r
-  FileWrite $R1 "s;@client_address@;$LocalHostAddress;g$\r$\n"\r
-  FileWrite $R1 "s;@storage_address@;$LocalHostAddress;g$\r$\n"\r
-\r
-  ${If} "$ConfigClientName" != ""\r
-    FileWrite $R1 "s;@client_name@;$ConfigClientName;g$\r$\n"\r
-  ${EndIf}\r
-  ${If} "$ConfigClientPort" != ""\r
-    FileWrite $R1 "s;@client_port@;$ConfigClientPort;g$\r$\n"\r
-  ${EndIf}\r
-  ${If} "$ConfigClientMaxJobs" != ""\r
-    FileWrite $R1 "s;@client_maxjobs@;$ConfigClientMaxJobs;g$\r$\n"\r
-  ${EndIf}\r
-  ${If} "$ConfigClientPassword" != ""\r
-    FileWrite $R1 "s;@client_password@;$ConfigClientPassword;g$\r$\n"\r
-  ${EndIf}\r
-  ${If} "$ConfigStorageName" != ""\r
-    FileWrite $R1 "s;@storage_name@;$ConfigStorageName;g$\r$\n"\r
-  ${EndIf}\r
-  ${If} "$ConfigStoragePort" != ""\r
-    FileWrite $R1 "s;@storage_port@;$ConfigStoragePort;g$\r$\n"\r
-  ${EndIf}\r
-  ${If} "$ConfigStorageMaxJobs" != ""\r
-    FileWrite $R1 "s;@storage_maxjobs@;$ConfigStorageMaxJobs;g$\r$\n"\r
-  ${EndIf}\r
-  ${If} "$ConfigStoragePassword" != ""\r
-    FileWrite $R1 "s;@storage_password@;$ConfigStoragePassword;g$\r$\n"\r
-  ${EndIf}\r
-  ${If} "$ConfigDirectorName" != ""\r
-    FileWrite $R1 "s;@director_name@;$ConfigDirectorName;g$\r$\n"\r
-  ${EndIf}\r
-  ${If} "$ConfigDirectorPort" != ""\r
-    FileWrite $R1 "s;@director_port@;$ConfigDirectorPort;g$\r$\n"\r
-  ${EndIf}\r
-  ${If} "$ConfigDirectorMaxJobs" != ""\r
-    FileWrite $R1 "s;@director_maxjobs@;$ConfigDirectorMaxJobs;g$\r$\n"\r
-  ${EndIf}\r
-  ${If} "$ConfigDirectorPassword" != ""\r
-    FileWrite $R1 "s;@director_password@;$ConfigDirectorPassword;g$\r$\n"\r
-  ${EndIf}\r
-  ${If} "$ConfigDirectorMailServer" != ""\r
-    FileWrite $R1 "s;@smtp_host@;$ConfigDirectorMailServer;g$\r$\n"\r
-  ${EndIf}\r
-  ${If} "$ConfigDirectorMailAddress" != ""\r
-    FileWrite $R1 "s;@job_email@;$ConfigDirectorMailAddress;g$\r$\n"\r
-  ${EndIf}\r
-  ${If} "$ConfigMonitorName" != ""\r
-    FileWrite $R1 "s;@monitor_name@;$ConfigMonitorName;g$\r$\n"\r
-  ${EndIf}\r
-  ${If} "$ConfigMonitorPassword" != ""\r
-    FileWrite $R1 "s;@monitor_password@;$ConfigMonitorPassword;g$\r$\n"\r
-  ${EndIf}\r
-\r
-  ${If} $ConfigDirectorDB = 1\r
-    ${If} $MySQLPath != ""\r
-      ${StrRep} $R2 "$MySQLPath\bin" "\" "\\"\r
-      FileWrite $R1 "s;@SQL_BINDIR@;$R2;g$\r$\n"\r
-    ${EndIf}\r
-  ${ElseIf} $ConfigDirectorDB = 2\r
-    ${If} $PostgreSQLPath != ""\r
-      ${StrRep} $R2 "$PostgreSQLPath\bin" "\" "\\"\r
-      FileWrite $R1 "s;@SQL_BINDIR@;$R2;g$\r$\n"\r
-    ${EndIf}\r
-  ${EndIf}\r
-\r
-  FileClose $R1\r
-\r
-  ${If} $InstallType = ${MigrateInstall}\r
-    FileOpen $R1 $PLUGINSDIR\migrate.sed w\r
-    ${StrRep} $R2 "$APPDATA\Bacula\Work" "\" "\\\\"\r
-    FileWrite $R1 's;\(Working *Directory *= *\)[^ ][^ ]*.*$$;\1"$R2";$\r$\n'\r
-    FileWrite $R1 's;\(Pid *Directory *= *\)[^ ][^ ]*.*$$;\1"$R2";$\r$\n'\r
-    FileClose $R1\r
-  ${EndIf}\r
-\r
-  ${If} ${FileExists} "$OldInstallDir\bin\bacula-fd.exe"\r
-    nsExec::ExecToLog '"$OldInstallDir\bin\bacula-fd.exe" /kill'     ; Shutdown any bacula that could be running\r
-    Sleep 3000\r
-    nsExec::ExecToLog '"$OldInstallDir\bin\bacula-fd.exe" /remove'   ; Remove existing service\r
-  ${EndIf}\r
-\r
-  ${If} ${FileExists} "$OldInstallDir\bin\bacula-sd.exe"\r
-    nsExec::ExecToLog '"$OldInstallDir\bin\bacula-sd.exe" /kill'     ; Shutdown any bacula that could be running\r
-    Sleep 3000\r
-    nsExec::ExecToLog '"$OldInstallDir\bin\bacula-sd.exe" /remove'   ; Remove existing service\r
-  ${EndIf}\r
-\r
-  ${If} ${FileExists} "$OldInstallDir\bin\bacula-dir.exe"\r
-    nsExec::ExecToLog '"$OldInstallDir\bin\bacula-dir.exe" /kill'     ; Shutdown any bacula that could be running\r
-    Sleep 3000\r
-    nsExec::ExecToLog '"$OldInstallDir\bin\bacula-dir.exe" /remove'   ; Remove existing service\r
-  ${EndIf}\r
-\r
-SectionEnd\r
-\r
-SectionGroup "Client" SecGroupClient\r
-\r
-Section "File Service" SecFileDaemon\r
-  SectionIn 1 2 3\r
-\r
-  SetOutPath "$INSTDIR\bin\fdplugins"\r
-  File "${SRC_DIR}\exchange-fd.dll"\r
-\r
-  SetOutPath "$INSTDIR\bin"\r
-\r
-  File "${SRC_DIR}\bacula-fd.exe"\r
-\r
-  ${If} $InstallType = ${MigrateInstall}\r
-  ${AndIf} ${FileExists} "$OldInstallDir\bin\bacula-fd.conf"\r
-    CopyFiles "$OldInstallDir\bin\bacula-fd.conf" "$APPDATA\Bacula"\r
-    nsExec::ExecToLog '$PLUGINSDIR\sed.exe -f "$PLUGINSDIR\migrate.sed" -i.bak "$APPDATA\Bacula\bacula-fd.conf"'\r
-  ${Else}\r
-    File "/oname=$PLUGINSDIR\bacula-fd.conf" "bacula-fd.conf.in"\r
-\r
-    StrCpy $0 "$APPDATA\Bacula"\r
-    StrCpy $1 bacula-fd.conf\r
-    Call ConfigEditAndCopy\r
-  ${EndIf}\r
-\r
-  StrCpy $0 bacula-fd\r
-  StrCpy $1 "File Service"\r
-  StrCpy $2 $ConfigClientInstallService\r
-  StrCpy $3 $ConfigClientStartService\r
-\r
-  Call InstallDaemon\r
-\r
-  CreateShortCut "$SMPROGRAMS\Bacula\Configuration\Edit Client Configuration.lnk" "write.exe" '"$APPDATA\Bacula\bacula-fd.conf"'\r
-SectionEnd\r
-\r
-SectionGroupEnd\r
-\r
-SectionGroup "Server" SecGroupServer\r
-\r
-Section "Storage Service" SecStorageDaemon\r
-  SectionIn 2 3\r
-\r
-  SetOutPath "$INSTDIR\bin"\r
-\r
-  File "${SRC_DIR}\loaderinfo.exe"\r
-  File "${SRC_DIR}\mt.exe"\r
-  File "${SRC_DIR}\mtx.exe"\r
-  File "${SRC_DIR}\scsitape.exe"\r
-  File "${SRC_DIR}\tapeinfo.exe"\r
-  File "${SRC_DIR}\bacula-sd.exe"\r
-  File "${SRC_DIR}\bcopy.exe"\r
-  File "${SRC_DIR}\bextract.exe"\r
-  File "${SRC_DIR}\bls.exe"\r
-  File "${SRC_DIR}\bscan.exe"\r
-  File "${SRC_DIR}\btape.exe"\r
-  File "${SRC_DIR}\scsilist.exe"\r
-  File "${SRC_DIR}\mkisofs.exe"\r
-  File "${SRC_DIR}\growisofs.exe"\r
-  File "${SRC_DIR}\dvd-ram-control.exe"\r
-  File "${SRC_DIR}\dvd+rw-booktype.exe"\r
-  File "${SRC_DIR}\dvd+rw-format.exe"\r
-  File "${SRC_DIR}\dvd+rw-mediainfo.exe"\r
-\r
-  File "/oname=$PLUGINSDIR\mtx-changer.cmd" "${SRC_DIR}\mtx-changer.cmd"\r
-\r
-  StrCpy $0 "$INSTDIR\bin"\r
-  StrCpy $1 mtx-changer.cmd\r
-  Call ConfigEditAndCopy\r
-\r
-  File "/oname=$PLUGINSDIR\disk-changer.cmd" "${SRC_DIR}\disk-changer.cmd"\r
-\r
-  StrCpy $0 "$INSTDIR\bin"\r
-  StrCpy $1 disk-changer.cmd\r
-  Call ConfigEditAndCopy\r
-\r
-  File "/oname=$PLUGINSDIR\dvd-handler.cmd" "${SRC_DIR}\dvd-handler.cmd"\r
-\r
-  StrCpy $0 "$INSTDIR\bin"\r
-  StrCpy $1 dvd-handler.cmd\r
-  Call ConfigEditAndCopy\r
-\r
-  File "/oname=$PLUGINSDIR\bacula-sd.conf" "bacula-sd.conf.in"\r
-\r
-  StrCpy $0 "$APPDATA\Bacula"\r
-  StrCpy $1 bacula-sd.conf\r
-  Call ConfigEditAndCopy\r
-\r
-  StrCpy $0 bacula-sd\r
-  StrCpy $1 "Storage Service"\r
-  StrCpy $2 $ConfigStorageInstallService\r
-  StrCpy $3 $ConfigStorageStartService\r
-  Call InstallDaemon\r
-\r
-  CreateShortCut "$SMPROGRAMS\Bacula\Configuration\List Devices.lnk" "$INSTDIR\bin\scsilist.exe" "/pause"\r
-  CreateShortCut "$SMPROGRAMS\Bacula\Configuration\Edit Storage Configuration.lnk" "write.exe" '"$APPDATA\Bacula\bacula-sd.conf"'\r
-SectionEnd\r
-\r
-Section "Director Service" SecDirectorDaemon\r
-  SectionIn 2 3\r
-\r
-  SetOutPath "$INSTDIR\bin"\r
-\r
-  ${If} $ConfigDirectorDB = 1\r
-    File /oname=bacula_cats.dll "${SRC_DIR}\cats_mysql.dll"\r
-    File "${SRC_DIR}\libmysql.dll"\r
-    File /oname=$PLUGINSDIR\create_database.cmd ${SRC_DIR}\create_mysql_database.cmd\r
-    File /oname=$PLUGINSDIR\drop_database.cmd ${SRC_DIR}\drop_mysql_database.cmd\r
-    File /oname=$PLUGINSDIR\make_tables.cmd ${SRC_DIR}\make_mysql_tables.cmd\r
-    File ${SRC_DIR}\make_mysql_tables.sql\r
-    File /oname=$PLUGINSDIR\drop_tables.cmd ${SRC_DIR}\drop_mysql_tables.cmd\r
-    File ${SRC_DIR}\drop_mysql_tables.sql\r
-    File /oname=$PLUGINSDIR\grant_privileges.cmd ${SRC_DIR}\grant_mysql_privileges.cmd\r
-    File ${SRC_DIR}\grant_mysql_privileges.sql\r
-    File /oname=$PLUGINSDIR\make_catalog_backup.cmd ${SRC_DIR}\make_mysql_catalog_backup.cmd\r
-  ${ElseIf} $ConfigDirectorDB = 2\r
-    File /oname=bacula_cats.dll "${SRC_DIR}\cats_postgresql.dll"\r
-    File "${SRC_DIR}\libpq.dll"\r
-!if "${BUILD_TOOLS}" == "VC8"\r
-    File "${SRC_DIR}\comerr32.dll"\r
-    File "${SRC_DIR}\libintl-2.dll"\r
-    File "${SRC_DIR}\libiconv-2.dll"\r
-    File "${SRC_DIR}\krb5_32.dll"\r
-!endif\r
-!If "${BUILD_TOOLS}" == "VC8_DEBUG"\r
-    File "${SRC_DIR}\comerr32.dll"\r
-    File "${SRC_DIR}\libintl-2.dll"\r
-    File "${SRC_DIR}\libiconv-2.dll"\r
-    File "${SRC_DIR}\krb5_32.dll"\r
-!endif\r
-    File /oname=$PLUGINSDIR\create_database.cmd ${SRC_DIR}\create_postgresql_database.cmd\r
-    File /oname=$PLUGINSDIR\drop_database.cmd ${SRC_DIR}\drop_postgresql_database.cmd\r
-    File /oname=$PLUGINSDIR\make_tables.cmd ${SRC_DIR}\make_postgresql_tables.cmd\r
-    File ${SRC_DIR}\create_postgresql_database.sql\r
-    File ${SRC_DIR}\make_postgresql_tables.sql\r
-    File /oname=$PLUGINSDIR\drop_tables.cmd ${SRC_DIR}\drop_postgresql_tables.cmd\r
-    File ${SRC_DIR}\drop_postgresql_tables.sql\r
-    File /oname=$PLUGINSDIR\grant_privileges.cmd ${SRC_DIR}\grant_postgresql_privileges.cmd\r
-    File ${SRC_DIR}\grant_postgresql_privileges.sql\r
-    File /oname=$PLUGINSDIR\make_catalog_backup.cmd ${SRC_DIR}\make_postgresql_catalog_backup.cmd\r
-  ${ElseIf} $ConfigDirectorDB = 3\r
-    File "${SRC_DIR}\sqlite3.exe"\r
-!if "${BUILD_TOOLS}" == "VC8"\r
-    File "${SRC_DIR}\sqlite3.exe.manifest"\r
-!endif\r
-!If "${BUILD_TOOLS}" == "VC8_DEBUG"\r
-    File "${SRC_DIR}\sqlite3.exe.manifest"\r
-!endif\r
-    File /oname=bacula_cats.dll "${SRC_DIR}\cats_sqlite3.dll"\r
-    File /oname=$PLUGINSDIR\create_database.cmd ${SRC_DIR}\create_sqlite3_database.cmd\r
-    File /oname=$PLUGINSDIR\drop_database.cmd ${SRC_DIR}\drop_sqlite3_database.cmd\r
-    File /oname=$PLUGINSDIR\make_tables.cmd ${SRC_DIR}\make_sqlite3_tables.cmd\r
-    File ${SRC_DIR}\make_sqlite3_tables.sql\r
-    File /oname=$PLUGINSDIR\drop_tables.cmd ${SRC_DIR}\drop_sqlite3_tables.cmd\r
-    File /oname=$PLUGINSDIR\grant_privileges.cmd ${SRC_DIR}\grant_sqlite3_privileges.cmd\r
-    File /oname=$PLUGINSDIR\make_catalog_backup.cmd ${SRC_DIR}\make_sqlite3_catalog_backup.cmd\r
-  ${EndIf}\r
-\r
-  File "${SRC_DIR}\bacula-dir.exe"\r
-  File "${SRC_DIR}\dbcheck.exe"\r
-\r
-  File "/oname=$PLUGINSDIR\delete_catalog_backup.cmd" "${SRC_DIR}\delete_catalog_backup.cmd"\r
-\r
-  StrCpy $0 "$INSTDIR\bin"\r
-  \r
-  StrCpy $1 create_database.cmd\r
-  Call ConfigEditAndCopy\r
-\r
-  StrCpy $1 drop_database.cmd\r
-  Call ConfigEditAndCopy\r
-\r
-  StrCpy $1 make_tables.cmd\r
-  Call ConfigEditAndCopy\r
-\r
-  StrCpy $1 drop_tables.cmd\r
-  Call ConfigEditAndCopy\r
-\r
-  StrCpy $1 grant_privileges.cmd\r
-  Call ConfigEditAndCopy\r
-\r
-  StrCpy $1 make_catalog_backup.cmd\r
-  Call ConfigEditAndCopy\r
-\r
-  StrCpy $1 delete_catalog_backup.cmd\r
-  Call ConfigEditAndCopy\r
-\r
-  File "${SRC_DIR}\query.sql"\r
-\r
-  File "/oname=$PLUGINSDIR\bacula-dir.conf" "bacula-dir.conf.in"\r
-\r
-  StrCpy $0 "$APPDATA\Bacula"\r
-  StrCpy $1 bacula-dir.conf\r
-  Call ConfigEditAndCopy\r
-\r
-  StrCpy $0 bacula-dir\r
-  StrCpy $1 "Director Service"\r
-  StrCpy $2 $ConfigDirectorInstallService\r
-  StrCpy $3 $ConfigDirectorStartService\r
-  Call InstallDaemon\r
-\r
-  CreateShortCut "$SMPROGRAMS\Bacula\Configuration\Edit Director Configuration.lnk" "write.exe" '"$APPDATA\Bacula\bacula-dir.conf"'\r
-SectionEnd\r
-\r
-SectionGroupEnd\r
-\r
-SectionGroup "Consoles" SecGroupConsoles\r
-\r
-Section "Command Console" SecConsole\r
-  SectionIn 1 2 3\r
-\r
-  SetOutPath "$INSTDIR\bin"\r
-\r
-  File "${SRC_DIR}\bconsole.exe"\r
-  Call InstallCommonFiles\r
-\r
-  ${If} $InstallType = ${MigrateInstall}\r
-  ${AndIf} ${FileExists} "$OldInstallDir\bin\bconsole.conf"\r
-    CopyFiles "$OldInstallDir\bin\bconsole.conf" "$APPDATA\Bacula"\r
-  ${Else}\r
-    File "/oname=$PLUGINSDIR\bconsole.conf" "bconsole.conf.in"\r
-    StrCpy $0 "$APPDATA\Bacula"\r
-    StrCpy $1 bconsole.conf\r
-    Call ConfigEditAndCopy\r
-  ${EndIf}\r
-\r
-  CreateShortCut "$SMPROGRAMS\Bacula\bconsole.lnk" "$INSTDIR\bin\bconsole.exe" '-c "$APPDATA\Bacula\bconsole.conf"' "$INSTDIR\bin\bconsole.exe" 0\r
-  CreateShortCut "$SMPROGRAMS\Bacula\Configuration\Edit Command Console Configuration.lnk" "write.exe" '"$APPDATA\Bacula\bconsole.conf"'\r
-\r
-SectionEnd\r
-\r
-Section "Graphical Console" SecWxConsole\r
-  SectionIn 1 2 3\r
-  \r
-  SetOutPath "$INSTDIR\bin"\r
-\r
-  Call InstallCommonFiles\r
-!if "${BUILD_TOOLS}" == "VC8"\r
-  File "${SRC_DIR}\wxbase28_vc_bacula.dll"\r
-  File "${SRC_DIR}\wxmsw28_core_vc_bacula.dll"\r
-!endif\r
-!If "${BUILD_TOOLS}" == "VC8_DEBUG"\r
-  File "${SRC_DIR}\wxbase28_vc_bacula.dll"\r
-  File "${SRC_DIR}\wxmsw28_core_vc_bacula.dll"\r
-!endif\r
-!if "${BUILD_TOOLS}" == "MinGW"\r
-  File "${SRC_DIR}\wxbase28_gcc_bacula.dll"\r
-  File "${SRC_DIR}\wxmsw28_core_gcc_bacula.dll"\r
-!endif\r
-\r
-  File "${SRC_DIR}\bwx-console.exe"\r
-\r
-  ${If} $InstallType = ${MigrateInstall}\r
-  ${AndIf} ${FileExists} "$OldInstallDir\bin\bwx-console.conf"\r
-    CopyFiles "$OldInstallDir\bin\bwx-console.conf" "$APPDATA\Bacula"\r
-  ${Else}\r
-    File "/oname=$PLUGINSDIR\bwx-console.conf" "bwx-console.conf.in"\r
-    StrCpy $0 "$APPDATA\Bacula"\r
-    StrCpy $1 bwx-console.conf\r
-    Call ConfigEditAndCopy\r
-  ${EndIf}\r
-\r
-  ; Create Start Menu entry\r
-  CreateShortCut "$SMPROGRAMS\Bacula\bwx-console.lnk" "$INSTDIR\bin\bwx-console.exe" '-c "$APPDATA\Bacula\bwx-console.conf"' "$INSTDIR\bin\bwx-console.exe" 0\r
-  CreateShortCut "$SMPROGRAMS\Bacula\Configuration\Edit Graphical Console Configuration.lnk" "write.exe" '"$APPDATA\Bacula\bwx-console.conf"'\r
-SectionEnd\r
-\r
-SectionGroupEnd\r
-\r
-SectionGroup "Documentation" SecGroupDocumentation\r
-\r
-Section "Documentation (Acrobat Format)" SecDocPdf\r
-  SectionIn 1 2 3\r
-\r
-  SetOutPath "$INSTDIR\doc"\r
-  CreateDirectory "$INSTDIR\doc"\r
-\r
-  File "${SRC_DIR}\manual\bacula.pdf"\r
-  CreateShortCut "$SMPROGRAMS\Bacula\Documentation\Manual.lnk" '"$INSTDIR\doc\bacula.pdf"'\r
-SectionEnd\r
-\r
-Section "Documentation (HTML Format)" SecDocHtml\r
-  SectionIn 3\r
-\r
-  SetOutPath "$INSTDIR\doc"\r
-  CreateDirectory "$INSTDIR\doc"\r
-\r
-  File "${SRC_DIR}\manual\bacula\*.html"\r
-  File "${SRC_DIR}\manual\bacula\*.png"\r
-  File "${SRC_DIR}\manual\bacula\*.css"\r
-  CreateShortCut "$SMPROGRAMS\Bacula\Documentation\Manual (HTML).lnk" '"$INSTDIR\doc\index.html"'\r
-SectionEnd\r
-\r
-SectionGroupEnd\r
-\r
-Section "-Finish"\r
-  Push $R0\r
-\r
-  ${If} $OsIsNT = 1\r
-    nsExec::ExecToLog 'cmd.exe /C echo Y|cacls "$INSTDIR" /T /G SYSTEM:F Administrators:F'\r
-    nsExec::ExecToLog 'cmd.exe /C echo Y|cacls "$APPDATA\Bacula" /T /G SYSTEM:F Administrators:F'\r
-  ${EndIf}\r
-\r
-  ; Write the uninstall keys for Windows & create Start Menu entry\r
-  WriteRegStr   HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "DisplayName" "Bacula"\r
-  WriteRegStr   HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "InstallLocation" "$INSTDIR"\r
-  WriteRegStr   HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "DisplayVersion" "${VERSION}"\r
-  ${StrTok} $R0 "${VERSION}" "." 0 0\r
-  WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "VersionMajor" $R0\r
-  ${StrTok} $R0 "${VERSION}" "." 1 0\r
-  WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "VersionMinor" $R0\r
-  WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "NoModify" 1\r
-  WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "NoRepair" 1\r
-  WriteRegStr   HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "URLUpdateInfo" "http://sourceforge.net/project/showfiles.php?group_id=50727"\r
-  WriteRegStr   HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "URLInfoAbout" "http://www.bacula.org"\r
-  WriteRegStr   HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "HelpLink" "http://www.bacula.org/?page=support"\r
-  WriteRegStr   HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "UninstallString" '"$INSTDIR\uninstall.exe"'\r
-  WriteUninstaller "$INSTDIR\Uninstall.exe"\r
-  CreateShortCut "$SMPROGRAMS\Bacula\Uninstall Bacula.lnk" "$INSTDIR\Uninstall.exe" "" "$INSTDIR\Uninstall.exe" 0\r
-  Pop $R0\r
-SectionEnd\r
-\r
-; Extra Page descriptions\r
-\r
-LangString DESC_SecFileDaemon ${LANG_ENGLISH} "Install Bacula File Daemon on this system."\r
-LangString DESC_SecStorageDaemon ${LANG_ENGLISH} "Install Bacula Storage Daemon on this system."\r
-LangString DESC_SecDirectorDaemon ${LANG_ENGLISH} "Install Bacula Director Daemon on this system."\r
-LangString DESC_SecConsole ${LANG_ENGLISH} "Install command console program on this system."\r
-LangString DESC_SecWxConsole ${LANG_ENGLISH} "Install graphical console program on this system."\r
-LangString DESC_SecDocPdf ${LANG_ENGLISH} "Install documentation in Acrobat format on this system."\r
-LangString DESC_SecDocHtml ${LANG_ENGLISH} "Install documentation in HTML format on this system."\r
-\r
-LangString TITLE_ConfigPage1 ${LANG_ENGLISH} "Configuration"\r
-LangString SUBTITLE_ConfigPage1 ${LANG_ENGLISH} "Set installation configuration."\r
-\r
-LangString TITLE_ConfigPage2 ${LANG_ENGLISH} "Configuration (continued)"\r
-LangString SUBTITLE_ConfigPage2 ${LANG_ENGLISH} "Set installation configuration."\r
-\r
-LangString TITLE_InstallType ${LANG_ENGLISH} "Installation Type"\r
-LangString SUBTITLE_InstallType ${LANG_ENGLISH} "Choose installation type."\r
-\r
-LangString TITLE_WriteTemplates ${LANG_ENGLISH} "Create Templates"\r
-LangString SUBTITLE_WriteTemplates ${LANG_ENGLISH} "Create resource templates for inclusion in the Director's configuration file."\r
-\r
-!InsertMacro MUI_FUNCTION_DESCRIPTION_BEGIN\r
-  !InsertMacro MUI_DESCRIPTION_TEXT ${SecFileDaemon} $(DESC_SecFileDaemon)\r
-  !InsertMacro MUI_DESCRIPTION_TEXT ${SecStorageDaemon} $(DESC_SecStorageDaemon)\r
-  !InsertMacro MUI_DESCRIPTION_TEXT ${SecDirectorDaemon} $(DESC_SecDirectorDaemon)\r
-  !InsertMacro MUI_DESCRIPTION_TEXT ${SecConsole} $(DESC_SecConsole)\r
-  !InsertMacro MUI_DESCRIPTION_TEXT ${SecWxConsole} $(DESC_SecWxConsole)\r
-  !InsertMacro MUI_DESCRIPTION_TEXT ${SecDocPdf} $(DESC_SecDocPdf)\r
-  !InsertMacro MUI_DESCRIPTION_TEXT ${SecDocHtml} $(DESC_SecDocHtml)\r
-!InsertMacro MUI_FUNCTION_DESCRIPTION_END\r
-\r
-; Uninstall section\r
-\r
-UninstallText "This will uninstall Bacula. Hit next to continue."\r
-\r
-Section "Uninstall"\r
-  ; Shutdown any baculum that could be running\r
-  nsExec::ExecToLog '"$INSTDIR\bin\bacula-fd.exe" /kill'\r
-  nsExec::ExecToLog '"$INSTDIR\bin\bacula-sd.exe" /kill'\r
-  nsExec::ExecToLog '"$INSTDIR\bin\bacula-dir.exe" /kill'\r
-  Sleep 3000\r
-\r
-  ReadRegDWORD $R0 HKLM "Software\Bacula" "Service_Bacula-fd"\r
-  ${If} $R0 = 1\r
-    ; Remove bacula service\r
-    nsExec::ExecToLog '"$INSTDIR\bin\bacula-fd.exe" /remove'\r
-    nsExec::ExecToLog '"$INSTDIR\bin\exchange-fd.dll" /remove'\r
-  ${EndIf}\r
-  \r
-  ReadRegDWORD $R0 HKLM "Software\Bacula" "Service_Bacula-sd"\r
-  ${If} $R0 = 1\r
-    ; Remove bacula service\r
-    nsExec::ExecToLog '"$INSTDIR\bin\bacula-sd.exe" /remove'\r
-  ${EndIf}\r
-  \r
-  ReadRegDWORD $R0 HKLM "Software\Bacula" "Service_Bacula-dir"\r
-  ${If} $R0 = 1\r
-    ; Remove bacula service\r
-    nsExec::ExecToLog '"$INSTDIR\bin\bacula-dir.exe" /remove'\r
-  ${EndIf}\r
-  \r
-  ; remove registry keys\r
-  DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula"\r
-  DeleteRegKey HKLM "Software\Bacula"\r
-\r
-  ; remove start menu items\r
-  SetShellVarContext all\r
-  Delete /REBOOTOK "$SMPROGRAMS\Bacula\*"\r
-  RMDir "$SMPROGRAMS\Bacula"\r
-\r
-  ; remove files and uninstaller (preserving config for now)\r
-  Delete /REBOOTOK "$INSTDIR\bin\*"\r
-  Delete /REBOOTOK "$INSTDIR\doc\*"\r
-  Delete /REBOOTOK "$INSTDIR\*"\r
-\r
-  ; Check for existing installation\r
-  MessageBox MB_YESNO|MB_ICONQUESTION \\r
-  "Would you like to delete the current configuration files and the working state file?" IDNO NoDel\r
-    Delete /REBOOTOK "$APPDATA\Bacula\*"\r
-    Delete /REBOOTOK "$APPDATA\Bacula\Work\*"\r
-    Delete /REBOOTOK "$APPDATA\Bacula\Spool\*"\r
-    Delete /REBOOTOK "$PLUGINSDIR\bacula-*.conf"\r
-    Delete /REBOOTOK "$PLUGINSDIR\*console.conf"\r
-    Delete /REBOOTOK "$PLUGINSDIR\*conf.in"\r
-    Delete /REBOOTOK "$PLUGINSDIR\openssl.exe"\r
-    Delete /REBOOTOK "$PLUGINSDIR\libeay32.dll"\r
-    Delete /REBOOTOK "$PLUGINSDIR\ssleay32.dll"\r
-    Delete /REBOOTOK "$PLUGINSDIR\sed.exe"    \r
-    Delete /REBOOTOK "$PLUGINSDIR\pw.txt"     \r
-    Delete /REBOOTOK "$PLUGINSDIR\*.sed" \r
-    Delete /REBOOTOK "$PLUGINSDIR\*.cmd"    \r
-    Delete /REBOOTOK "$PLUGINSDIR\*.sql"    \r
-    RMDir "$APPDATA\Bacula\Work"\r
-    RMDir "$APPDATA\Bacula\Spool"\r
-    RMDir "$APPDATA\Bacula"\r
-NoDel:\r
-\r
-  ; remove directories used\r
-  RMDir "$INSTDIR\bin"\r
-  RMDir "$INSTDIR\doc"\r
-  RMDir "$INSTDIR"\r
-SectionEnd\r
-\r
-;\r
-; $0 - Service Name (ie Bacula-FD)\r
-; $1 - Service Description (ie Bacula File Daemon)\r
-; $2 - Install as Service\r
-; $3 - Start Service now\r
-;\r
-Function InstallDaemon\r
-  Call InstallCommonFiles\r
-\r
-  WriteRegDWORD HKLM "Software\Bacula" "Service_$0" $2\r
-  \r
-  ${If} $2 = 1\r
-    nsExec::ExecToLog '"$INSTDIR\bin\$0.exe" /install -c "$APPDATA\Bacula\$0.conf"'\r
-\r
-    ${If} $OsIsNT <> 1\r
-      File "Start.bat"\r
-      File "Stop.bat"\r
-    ${EndIf}\r
-\r
-    ; Start the service?\r
-\r
-    ${If} $3 = 1  \r
-      ${If} $OsIsNT = 1\r
-        nsExec::ExecToLog 'net start $0'\r
-      ${Else}\r
-        Exec '"$INSTDIR\bin\$0.exe" -c "$APPDATA\Bacula\$0.conf"'\r
-      ${EndIf}\r
-    ${EndIf}\r
-  ${Else}\r
-    CreateShortCut "$SMPROGRAMS\Bacula\Start $1.lnk" "$INSTDIR\bin\$0.exe" '-c "$APPDATA\Bacula\$0.conf"' "$INSTDIR\bin\$0.exe" 0\r
-  ${EndIf}\r
-FunctionEnd\r
-\r
-Function GetComputerName\r
-  Push $R0\r
-  Push $R1\r
-  Push $R2\r
-\r
-  System::Call "kernel32::GetComputerNameA(t .R0, *i ${NSIS_MAX_STRLEN} R1) i.R2"\r
-\r
-  ${StrCase} $R0 $R0 "L"\r
-\r
-  Pop $R2\r
-  Pop $R1\r
-  Exch $R0\r
-FunctionEnd\r
-\r
-!define ComputerNameDnsFullyQualified   3\r
-\r
-Function GetHostName\r
-  Push $R0\r
-  Push $R1\r
-  Push $R2\r
-\r
-  ${If} $OsIsNT = 1\r
-    System::Call "kernel32::GetComputerNameExA(i ${ComputerNameDnsFullyQualified}, t .R0, *i ${NSIS_MAX_STRLEN} R1) i.R2 ?e"\r
-    ${If} $R2 = 0\r
-      Pop $R2\r
-      DetailPrint "GetComputerNameExA failed - LastError = $R2"\r
-      Call GetComputerName\r
-      Pop $R0\r
-    ${Else}\r
-      Pop $R2\r
-    ${EndIf}\r
-  ${Else}\r
-    Call GetComputerName\r
-    Pop $R0\r
-  ${EndIf}\r
-\r
-  Pop $R2\r
-  Pop $R1\r
-  Exch $R0\r
-FunctionEnd\r
-\r
-!define NameUserPrincipal 8\r
-\r
-Function GetUserName\r
-  Push $R0\r
-  Push $R1\r
-  Push $R2\r
-\r
-  ${If} $OsIsNT = 1\r
-    System::Call "secur32::GetUserNameExA(i ${NameUserPrincipal}, t .R0, *i ${NSIS_MAX_STRLEN} R1) i.R2 ?e"\r
-    ${If} $R2 = 0\r
-      Pop $R2\r
-      DetailPrint "GetUserNameExA failed - LastError = $R2"\r
-      Pop $R0\r
-      StrCpy $R0 ""\r
-    ${Else}\r
-      Pop $R2\r
-    ${EndIf}\r
-  ${Else}\r
-      StrCpy $R0 ""\r
-  ${EndIf}\r
-\r
-  ${If} $R0 == ""\r
-    System::Call "advapi32::GetUserNameA(t .R0, *i ${NSIS_MAX_STRLEN} R1) i.R2 ?e"\r
-    ${If} $R2 = 0\r
-      Pop $R2\r
-      DetailPrint "GetUserNameA failed - LastError = $R2"\r
-      StrCpy $R0 ""\r
-    ${Else}\r
-      Pop $R2\r
-    ${EndIf}\r
-  ${EndIf}\r
-\r
-  Pop $R2\r
-  Pop $R1\r
-  Exch $R0\r
-FunctionEnd\r
-\r
-Function ConfigEditAndCopy\r
-  Push $R1\r
-\r
-  ${If} ${FileExists} "$0\$1"\r
-    StrCpy $R1 ".new"\r
-  ${Else}\r
-    StrCpy $R1 ""\r
-  ${EndIf}\r
-\r
-  nsExec::ExecToLog '$PLUGINSDIR\sed.exe -f "$PLUGINSDIR\config.sed" -i.bak "$PLUGINSDIR\$1"'\r
-  CopyFiles "$PLUGINSDIR\$1" "$0\$1$R1"\r
-\r
-  Pop $R1\r
-FunctionEnd\r
-\r
-Function FindDatabaseApps\r
-  Push $R1\r
-\r
-  ReadRegStr $0 HKLM "Software\MySQL AB\MySQL Server 5.0" "Location"\r
-\r
-  ${If} $0 != ""\r
-    Call RemoveTrailingSlash\r
-    StrCpy $MySQLPath $0\r
-    ReadRegStr $0 HKLM "Software\MySQL AB\MySQL Server 5.0" "Version"\r
-    StrCpy $MySQLVersion $0\r
-  ${EndIf}\r
-\r
-  EnumRegKey $R1 HKLM "Software\PostgreSQL\Installations" 0\r
-  ${If} $R1 != ""\r
-    ReadRegStr $0 HKLM "Software\PostgreSQL\Installations\$R1" "Base Directory"\r
-    Call RemoveTrailingSlash\r
-    StrCpy $PostgreSQLPath $0\r
-    ReadRegStr $0 HKLM "Software\PostgreSQL\Installations\$R1" "Version"\r
-    StrCpy $PostgreSQLVersion $0\r
-  ${EndIf}\r
-\r
-  Pop $R1\r
-FunctionEnd\r
-\r
-Function RemoveTrailingSlash\r
-  Push $R1\r
-  StrCpy $R1 $0 "" -1\r
-  ${If} $R1 == "\"\r
-    StrCpy $0 $0 -1\r
-  ${EndIf}\r
-  Pop $R1\r
-FunctionEnd\r
-\r
-Function IsDirectorSelected\r
-  Push $R0\r
-  SectionGetFlags ${SecDirectorDaemon} $R0\r
-  IntOp $R0 $R0 & ${SF_SELECTED}\r
-  Exch $R0\r
-FunctionEnd\r
-\r
-Function GetSelectedComponents\r
-  Push $R0\r
-  StrCpy $R0 0\r
-  ${If} ${SectionIsSelected} ${SecFileDaemon}\r
-    IntOp $R0 $R0 | ${ComponentFile}\r
-  ${EndIf}\r
-  ${If} ${SectionIsSelected} ${SecStorageDaemon}\r
-    IntOp $R0 $R0 | ${ComponentStorage}\r
-  ${EndIf}\r
-  ${If} ${SectionIsSelected} ${SecDirectorDaemon}\r
-    IntOp $R0 $R0 | ${ComponentDirector}\r
-  ${EndIf}\r
-  ${If} ${SectionIsSelected} ${SecConsole}\r
-    IntOp $R0 $R0 | ${ComponentTextConsole}\r
-  ${EndIf}\r
-  ${If} ${SectionIsSelected} ${SecWxConsole}\r
-    IntOp $R0 $R0 | ${ComponentGUIConsole}\r
-  ${EndIf}\r
-  ${If} ${SectionIsSelected} ${SecDocPdf}\r
-    IntOp $R0 $R0 | ${ComponentPDFDocs}\r
-  ${EndIf}\r
-  ${If} ${SectionIsSelected} ${SecDocHtml}\r
-    IntOp $R0 $R0 | ${ComponentHTMLDocs}\r
-  ${EndIf}\r
-  Exch $R0\r
-FunctionEnd\r
-\r
-Function PageComponentsShow\r
-  ${If} $OsIsNT <> 1\r
-    Call DisableServerSections\r
-  ${EndIf}\r
-\r
-  Call SelectPreviousComponents\r
-  Call UpdateComponentUI\r
-FunctionEnd\r
-\r
-Function PageDirectoryPre\r
-  ${If} $AutomaticInstall = 1\r
-  ${OrIf} $InstallType = ${UpgradeInstall}\r
-    Abort\r
-  ${EndIf}\r
-FunctionEnd\r
-\r
-Function LeaveInstallPage\r
-  Push "$INSTDIR\install.log"\r
-  Call DumpLog\r
-FunctionEnd\r
-\r
-Function EnterWriteTemplates\r
-  Push $R0\r
-  Push $R1\r
-\r
-  Call GetSelectedComponents\r
-  Pop $R0\r
-\r
-  IntOp $R0 $R0 & ${ComponentDirector}\r
-  IntOp $R1 $NewComponents & ${ComponentsFileAndStorage}\r
-\r
-  ${If} $R0 <> 0\r
-  ${OrIf} $R1 = 0\r
-    Pop $R1\r
-    Pop $R0\r
-    Abort\r
-  ${EndIf}\r
-\r
-  IntOp $R0 $NewComponents & ${ComponentFile}\r
-  ${If} $R0 = 0\r
-    WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 2" State 0\r
-    WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 2" Flags DISABLED\r
-    DeleteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 3" State\r
-    WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 3" Flags REQ_SAVE|FILE_EXPLORER|WARN_IF_EXIST|DISABLED\r
-  ${Else}\r
-    WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 2" State 1\r
-    DeleteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 2" Flags\r
-    WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 3" State "C:\$ConfigClientName.conf"\r
-    WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 5" Flags REQ_SAVE|FILE_EXPLORER|WARN_IF_EXIST\r
-  ${EndIf}\r
-\r
-  IntOp $R0 $NewComponents & ${ComponentStorage}\r
-  ${If} $R0 = 0\r
-    WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 4" State 0\r
-    WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 4" Flags DISABLED\r
-    DeleteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 5" State\r
-    WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 5" Flags REQ_SAVE|FILE_EXPLORER|WARN_IF_EXIST|DISABLED\r
-  ${Else}\r
-    WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 4" State 1\r
-    DeleteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 4" Flags\r
-    WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 5" State "C:\$ConfigStorageName.conf"\r
-    WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 5" Flags REQ_SAVE|FILE_EXPLORER|WARN_IF_EXIST\r
-  ${EndIf}\r
-\r
-  !InsertMacro MUI_HEADER_TEXT "$(TITLE_WriteTemplates)" "$(SUBTITLE_WriteTemplates)"\r
-  !InsertMacro MUI_INSTALLOPTIONS_DISPLAY "WriteTemplates.ini"\r
-\r
-  !InsertMacro MUI_INSTALLOPTIONS_READ $R0 "WriteTemplates.ini" "Field 2" State\r
-  ${If} $R0 <> 0\r
-    File "/oname=$PLUGINSDIR\client.conf.in" "client.conf.in"\r
-\r
-    nsExec::ExecToLog '$PLUGINSDIR\sed.exe -f "$PLUGINSDIR\config.sed" -i.bak "$PLUGINSDIR\client.conf.in"'\r
-    !InsertMacro MUI_INSTALLOPTIONS_READ $R0 "WriteTemplates.ini" "Field 3" State\r
-    ${If} $R0 != ""\r
-      CopyFiles "$PLUGINSDIR\client.conf.in" "$R0"\r
-    ${EndIf}\r
-  ${EndIf}\r
-\r
-  !InsertMacro MUI_INSTALLOPTIONS_READ $R0 "WriteTemplates.ini" "Field 4" State\r
-  ${If} $R0 <> 0\r
-    File "/oname=$PLUGINSDIR\storage.conf.in" "storage.conf.in"\r
-\r
-    nsExec::ExecToLog '$PLUGINSDIR\sed.exe -f "$PLUGINSDIR\config.sed" -i.bak "$PLUGINSDIR\storage.conf.in"'\r
-    !InsertMacro MUI_INSTALLOPTIONS_READ $R0 "WriteTemplates.ini" "Field 5" State\r
-    ${If} $R0 != ""\r
-      CopyFiles "$PLUGINSDIR\storage.conf.in" "$R0"\r
-    ${EndIf}\r
-  ${EndIf}\r
-\r
-  Pop $R1\r
-  Pop $R0\r
-FunctionEnd\r
-\r
-Function SelectPreviousComponents\r
-  ${If} $InstallType <> ${NewInstall}\r
-    IntOp $R1 $PreviousComponents & ${ComponentFile}\r
-    ${If} $R1 <> 0\r
-      !InsertMacro SelectSection ${SecFileDaemon}\r
-      !InsertMacro SetSectionFlag ${SecFileDaemon} ${SF_RO}\r
-    ${Else}\r
-      !InsertMacro UnselectSection ${SecFileDaemon}\r
-      !InsertMacro ClearSectionFlag ${SecFileDaemon} ${SF_RO}\r
-    ${EndIf}\r
-    IntOp $R1 $PreviousComponents & ${ComponentStorage}\r
-    ${If} $R1 <> 0\r
-      !InsertMacro SelectSection ${SecStorageDaemon}\r
-      !InsertMacro SetSectionFlag ${SecStorageDaemon} ${SF_RO}\r
-    ${Else}\r
-      !InsertMacro UnselectSection ${SecStorageDaemon}\r
-      !InsertMacro ClearSectionFlag ${SecStorageDaemon} ${SF_RO}\r
-    ${EndIf}\r
-    IntOp $R1 $PreviousComponents & ${ComponentDirector}\r
-    ${If} $R1 <> 0\r
-      !InsertMacro SelectSection ${SecDirectorDaemon}\r
-      !InsertMacro SetSectionFlag ${SecDirectorDaemon} ${SF_RO}\r
-    ${Else}\r
-      !InsertMacro UnselectSection ${SecDirectorDaemon}\r
-      !InsertMacro ClearSectionFlag ${SecDirectorDaemon} ${SF_RO}\r
-    ${EndIf}\r
-    IntOp $R1 $PreviousComponents & ${ComponentTextConsole}\r
-    ${If} $R1 <> 0\r
-      !InsertMacro SelectSection ${SecConsole}\r
-      !InsertMacro SetSectionFlag ${SecConsole} ${SF_RO}\r
-    ${Else}\r
-      !InsertMacro UnselectSection ${SecConsole}\r
-      !InsertMacro ClearSectionFlag ${SecConsole} ${SF_RO}\r
-    ${EndIf}\r
-    IntOp $R1 $PreviousComponents & ${ComponentGUIConsole}\r
-    ${If} $R1 <> 0\r
-      !InsertMacro SelectSection ${SecWxConsole}\r
-      !InsertMacro SetSectionFlag ${SecWxConsole} ${SF_RO}\r
-    ${Else}\r
-      !InsertMacro UnselectSection ${SecWxConsole}\r
-      !InsertMacro ClearSectionFlag ${SecWxConsole} ${SF_RO}\r
-    ${EndIf}\r
-    IntOp $R1 $PreviousComponents & ${ComponentPDFDocs}\r
-    ${If} $R1 <> 0\r
-      !InsertMacro SelectSection ${SecDocPdf}\r
-      !InsertMacro SetSectionFlag ${SecDocPdf} ${SF_RO}\r
-    ${Else}\r
-      !InsertMacro UnselectSection ${SecDocPdf}\r
-      !InsertMacro ClearSectionFlag ${SecDocPdf} ${SF_RO}\r
-    ${EndIf}\r
-    IntOp $R1 $PreviousComponents & ${ComponentHTMLDocs}\r
-    ${If} $R1 <> 0\r
-      !InsertMacro SelectSection ${SecDocHtml}\r
-      !InsertMacro SetSectionFlag ${SecDocHtml} ${SF_RO}\r
-    ${Else}\r
-      !InsertMacro UnselectSection ${SecDocHtml}\r
-      !InsertMacro ClearSectionFlag ${SecDocHtml} ${SF_RO}\r
-    ${EndIf}\r
-  ${EndIf}\r
-FunctionEnd\r
-\r
-Function DisableServerSections\r
-  !InsertMacro UnselectSection ${SecGroupServer}\r
-  !InsertMacro SetSectionFlag  ${SecGroupServer} ${SF_RO}\r
-  !InsertMacro UnselectSection ${SecStorageDaemon}\r
-  !InsertMacro SetSectionFlag  ${SecStorageDaemon} ${SF_RO}\r
-  !InsertMacro UnselectSection ${SecDirectorDaemon}\r
-  !InsertMacro SetSectionFlag  ${SecDirectorDaemon} ${SF_RO}\r
-FunctionEnd\r
-\r
-Function UpdateComponentUI\r
-  Push $R0\r
-  Push $R1\r
-\r
-  Call GetSelectedComponents\r
-  Pop $R0\r
-\r
-  IntOp $R1 $R0 ^ $PreviousComponents\r
-  IntOp $NewComponents $R0 & $R1\r
-\r
-  ${If} $InstallType <> ${NewInstall}\r
-    IntOp $R1 $NewComponents & ${ComponentFile}\r
-    ${If} $R1 <> 0\r
-      !InsertMacro SetSectionFlag ${SecFileDaemon} ${SF_BOLD}\r
-    ${Else}\r
-      !InsertMacro ClearSectionFlag ${SecFileDaemon} ${SF_BOLD}\r
-    ${EndIf}\r
-    IntOp $R1 $NewComponents & ${ComponentStorage}\r
-    ${If} $R1 <> 0\r
-      !InsertMacro SetSectionFlag ${SecStorageDaemon} ${SF_BOLD}\r
-    ${Else}\r
-      !InsertMacro ClearSectionFlag ${SecStorageDaemon} ${SF_BOLD}\r
-    ${EndIf}\r
-    IntOp $R1 $NewComponents & ${ComponentDirector}\r
-    ${If} $R1 <> 0\r
-      !InsertMacro SetSectionFlag ${SecDirectorDaemon} ${SF_BOLD}\r
-    ${Else}\r
-      !InsertMacro ClearSectionFlag ${SecDirectorDaemon} ${SF_BOLD}\r
-    ${EndIf}\r
-    IntOp $R1 $NewComponents & ${ComponentTextConsole}\r
-    ${If} $R1 <> 0\r
-      !InsertMacro SetSectionFlag ${SecConsole} ${SF_BOLD}\r
-    ${Else}\r
-      !InsertMacro ClearSectionFlag ${SecConsole} ${SF_BOLD}\r
-    ${EndIf}\r
-    IntOp $R1 $NewComponents & ${ComponentGUIConsole}\r
-    ${If} $R1 <> 0\r
-      !InsertMacro SetSectionFlag ${SecWxConsole} ${SF_BOLD}\r
-    ${Else}\r
-      !InsertMacro ClearSectionFlag ${SecWxConsole} ${SF_BOLD}\r
-    ${EndIf}\r
-    IntOp $R1 $NewComponents & ${ComponentPDFDocs}\r
-    ${If} $R1 <> 0\r
-      !InsertMacro SetSectionFlag ${SecDocPdf} ${SF_BOLD}\r
-    ${Else}\r
-      !InsertMacro ClearSectionFlag ${SecDocPdf} ${SF_BOLD}\r
-    ${EndIf}\r
-    IntOp $R1 $NewComponents & ${ComponentHTMLDocs}\r
-    ${If} $R1 <> 0\r
-      !InsertMacro SetSectionFlag ${SecDocHtml} ${SF_BOLD}\r
-    ${Else}\r
-      !InsertMacro ClearSectionFlag ${SecDocHtml} ${SF_BOLD}\r
-    ${EndIf}\r
-  ${EndIf}\r
-\r
-  GetDlgItem $R0 $HWNDPARENT 1\r
-\r
-  IntOp $R1 $NewComponents & ${ComponentsRequiringUserConfig}\r
-  ${If} $R1 = 0\r
-    SendMessage $R0 ${WM_SETTEXT} 0 "STR:Install"\r
-  ${Else}\r
-    SendMessage $R0 ${WM_SETTEXT} 0 "STR:&Next >"\r
-  ${EndIf}\r
-\r
-  Pop $R1\r
-  Pop $R0\r
-FunctionEnd\r
-\r
-!include "InstallType.nsh"\r
-!include "ConfigPage1.nsh"\r
-!include "ConfigPage2.nsh"\r
-!include "DumpLog.nsh"\r
+; 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 bwx-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
+;
+; Robert Nelson May 15 2006
+; Added server installs and implemented Microsoft install locations
+; Use LogicLib.nsh
+; Added Bacula-SD and Bacula-DIR
+; Replaced ParameterGiven with standard GetOptions
+;
+; Command line options:
+;
+; /service    - 
+; /start
+;
+; netsh firewall add portopening protocol=tcp port=9102 name="Bacula-FD"
+
+
+!define PRODUCT "Bacula"
+
+;
+; Include the Modern UI
+;
+
+!include "MUI.nsh"
+!include "LogicLib.nsh"
+!include "FileFunc.nsh"
+!include "Sections.nsh"
+!include "StrFunc.nsh"
+!include "WinMessages.nsh"
+;
+; Basics
+;
+Name "Bacula"
+OutFile "${OUT_DIR}\winbacula-${VERSION}.exe"
+SetCompressor lzma
+InstallDir "$PROGRAMFILES\Bacula"
+InstallDirRegKey HKLM "Software\Bacula" "InstallLocation"
+
+InstType "Client"
+InstType "Server"
+InstType "Full"
+
+!insertmacro GetParent
+
+${StrCase}
+${StrRep}
+${StrTok}
+${StrTrimNewLines}
+
+;
+; Pull in pages
+;
+
+!define      MUI_COMPONENTSPAGE_SMALLDESC
+
+!define      MUI_HEADERIMAGE
+!define      MUI_BGCOLOR                739AB9
+!define      MUI_HEADERIMAGE_BITMAP     "bacula-logo.bmp"
+
+!InsertMacro MUI_PAGE_WELCOME
+!InsertMacro MUI_PAGE_LICENSE "..\..\..\LICENSE"
+Page custom EnterInstallType
+!define      MUI_PAGE_CUSTOMFUNCTION_SHOW PageComponentsShow
+!InsertMacro MUI_PAGE_COMPONENTS
+!define      MUI_PAGE_CUSTOMFUNCTION_PRE PageDirectoryPre
+!InsertMacro MUI_PAGE_DIRECTORY
+Page custom EnterConfigPage1 LeaveConfigPage1
+Page custom EnterConfigPage2 LeaveConfigPage2
+!Define      MUI_PAGE_CUSTOMFUNCTION_LEAVE LeaveInstallPage
+!InsertMacro MUI_PAGE_INSTFILES
+Page custom EnterWriteTemplates
+!Define      MUI_FINISHPAGE_SHOWREADME $INSTDIR\Readme.txt
+!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"
+
+!InsertMacro GetParameters
+!InsertMacro GetOptions
+
+DirText "Setup will install Bacula ${VERSION} to the directory specified below. To install in a different folder, click Browse and select another folder."
+
+!InsertMacro MUI_RESERVEFILE_INSTALLOPTIONS
+;
+; Global Variables
+;
+Var OptService
+Var OptStart
+Var OptSilent
+
+Var CommonFilesDone
+
+Var OsIsNT
+
+Var HostName
+
+Var ConfigClientName
+Var ConfigClientPort
+Var ConfigClientMaxJobs
+Var ConfigClientPassword
+Var ConfigClientInstallService
+Var ConfigClientStartService
+
+Var ConfigStorageName
+Var ConfigStoragePort
+Var ConfigStorageMaxJobs
+Var ConfigStoragePassword
+Var ConfigStorageInstallService
+Var ConfigStorageStartService
+
+Var ConfigDirectorName
+Var ConfigDirectorPort
+Var ConfigDirectorMaxJobs
+Var ConfigDirectorPassword
+Var ConfigDirectorAddress
+Var ConfigDirectorMailServer
+Var ConfigDirectorMailAddress
+Var ConfigDirectorDB
+Var ConfigDirectorInstallService
+Var ConfigDirectorStartService
+
+Var ConfigMonitorName
+Var ConfigMonitorPassword
+
+Var LocalDirectorPassword
+Var LocalHostAddress
+
+Var MySQLPath
+Var MySQLVersion
+Var PostgreSQLPath
+Var PostgreSQLVersion
+
+Var AutomaticInstall
+Var InstallType
+!define NewInstall      0
+!define UpgradeInstall  1
+!define MigrateInstall  2
+
+Var OldInstallDir
+Var PreviousComponents
+Var NewComponents
+
+; Bit 0 = File Service
+;     1 = Storage Service
+;     2 = Director Service
+;     3 = Command Console
+;     4 = Bat Console
+;     5 = wxWidgets Console
+;     7 = Documentation (PDF)
+;     7 = Documentation (HTML)
+
+!define ComponentFile                   1
+!define ComponentStorage                2
+!define ComponentDirector               4
+!define ComponentTextConsole            8
+!define ComponentBatConsole             16
+!define ComponentGUIConsole             32
+!define ComponentPDFDocs                64
+!define ComponentHTMLDocs               128
+
+!define ComponentsRequiringUserConfig           63
+!define ComponentsFileAndStorage                3
+!define ComponentsFileAndStorageAndDirector     7
+!define ComponentsDirectorAndTextGuiConsoles    60
+!define ComponentsTextAndGuiConsoles            56
+
+Var HDLG
+Var HCTL
+
+Function .onInit
+  Push $R0
+  Push $R1
+
+  ; Process Command Line Options
+  StrCpy $OptService 1
+  StrCpy $OptStart 1
+  StrCpy $OptSilent 0
+  StrCpy $CommonFilesDone 0
+  StrCpy $OsIsNT 0
+  StrCpy $AutomaticInstall 0
+  StrCpy $InstallType ${NewInstall}
+  StrCpy $OldInstallDir ""
+  StrCpy $PreviousComponents 0
+  StrCpy $NewComponents 0
+  StrCpy $MySQLPath ""
+  StrCpy $MySQLVersion ""
+  StrCpy $PostgreSQLPath ""
+  StrCpy $PostgreSQLVersion ""
+
+  ${GetParameters} $R0
+
+  ClearErrors
+  ${GetOptions} $R0 "/noservice" $R1
+  IfErrors +2
+    StrCpy $OptService 0
+
+  ClearErrors
+  ${GetOptions} $R0 "/nostart" $R1
+  IfErrors +2
+    StrCpy $OptStart 0
+
+  IfSilent 0 +2
+    StrCpy $OptSilent 1
+
+  ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
+  ${If} $R0 != ""
+    StrCpy $OsIsNT 1
+  ${EndIf}
+
+  Call GetComputerName
+  Pop $HostName
+
+  Call GetHostName
+  Pop $LocalHostAddress
+
+  Call GetUserName
+  Pop $ConfigDirectorMailAddress
+
+  Call FindDatabaseApps
+
+  ; Configuration Defaults
+
+  StrCpy $ConfigClientName               "$HostName-fd"
+  StrCpy $ConfigClientPort               9102
+  StrCpy $ConfigClientMaxJobs            5
+  ;StrCpy $ConfigClientPassword
+  StrCpy $ConfigClientInstallService     "$OptService"
+  StrCpy $ConfigClientStartService       "$OptStart"
+
+  StrCpy $ConfigStorageName              "$HostName-sd"
+  StrCpy $ConfigStoragePort              9103
+  StrCpy $ConfigStorageMaxJobs           10
+  ;StrCpy $ConfigStoragePassword
+  StrCpy $ConfigStorageInstallService    "$OptService"
+  StrCpy $ConfigStorageStartService      "$OptStart"
+
+  ;StrCpy $ConfigDirectorName            "$HostName-dir"
+  StrCpy $ConfigDirectorPort             9101
+  StrCpy $ConfigDirectorMaxJobs          1
+  ;StrCpy $ConfigDirectorPassword
+  StrCpy $ConfigDirectorDB               0
+  StrCpy $ConfigDirectorInstallService   "$OptService"
+  StrCpy $ConfigDirectorStartService     "$OptStart"
+
+  StrCpy $ConfigMonitorName              "$HostName-mon"
+  ;StrCpy $ConfigMonitorPassword
+
+  InitPluginsDir
+  File "/oname=$PLUGINSDIR\openssl.exe"  "${SRC_DIR}\openssl.exe"
+  File "/oname=$PLUGINSDIR\libeay32.dll" "${SRC_DIR}\libeay32.dll"
+  File "/oname=$PLUGINSDIR\ssleay32.dll" "${SRC_DIR}\ssleay32.dll"
+  File "/oname=$PLUGINSDIR\sed.exe"      "${SRC_DIR}\sed.exe"
+
+  !InsertMacro MUI_INSTALLOPTIONS_EXTRACT "InstallType.ini"
+  !InsertMacro MUI_INSTALLOPTIONS_EXTRACT "WriteTemplates.ini"
+
+  SetPluginUnload alwaysoff
+
+  nsExec::Exec '"$PLUGINSDIR\openssl.exe" rand -base64 -out $PLUGINSDIR\pw.txt 33'
+  pop $R0
+  ${If} $R0 = 0
+   FileOpen $R1 "$PLUGINSDIR\pw.txt" r
+   IfErrors +4
+     FileRead $R1 $R0
+     ${StrTrimNewLines} $ConfigClientPassword $R0
+     FileClose $R1
+  ${EndIf}
+
+  nsExec::Exec '"$PLUGINSDIR\openssl.exe" rand -base64 -out $PLUGINSDIR\pw.txt 33'
+  pop $R0
+  ${If} $R0 = 0
+   FileOpen $R1 "$PLUGINSDIR\pw.txt" r
+   IfErrors +4
+     FileRead $R1 $R0
+     ${StrTrimNewLines} $ConfigStoragePassword $R0
+     FileClose $R1
+  ${EndIf}
+
+  nsExec::Exec '"$PLUGINSDIR\openssl.exe" rand -base64 -out $PLUGINSDIR\pw.txt 33'
+  pop $R0
+  ${If} $R0 = 0
+   FileOpen $R1 "$PLUGINSDIR\pw.txt" r
+   IfErrors +4
+     FileRead $R1 $R0
+     ${StrTrimNewLines} $LocalDirectorPassword $R0
+     FileClose $R1
+  ${EndIf}
+
+  SetPluginUnload manual
+
+  nsExec::Exec '"$PLUGINSDIR\openssl.exe" rand -base64 -out $PLUGINSDIR\pw.txt 33'
+  pop $R0
+  ${If} $R0 = 0
+   FileOpen $R1 "$PLUGINSDIR\pw.txt" r
+   IfErrors +4
+     FileRead $R1 $R0
+     ${StrTrimNewLines} $ConfigMonitorPassword $R0
+     FileClose $R1
+  ${EndIf}
+
+  Pop $R1
+  Pop $R0
+FunctionEnd
+
+Function .onSelChange
+  Call UpdateComponentUI
+FunctionEnd
+
+Function InstallCommonFiles
+  ${If} $CommonFilesDone = 0
+    SetOutPath "$INSTDIR"
+    File "Readme.txt"
+
+    SetOutPath "$INSTDIR\bin"
+!if "${BUILD_TOOLS}" == "VC8"
+    File "${SRC_DIR}\msvcm80.dll"
+    File "${SRC_DIR}\msvcp80.dll"
+    File "${SRC_DIR}\msvcr80.dll"
+    File "${SRC_DIR}\Microsoft.VC80.CRT.manifest"
+    File "${SRC_DIR}\pthreadVCE.dll"
+!endif
+!if "${BUILD_TOOLS}" == "VC8_DEBUG"
+    File "${SRC_DIR}\msvcm80.dll"
+    File "${SRC_DIR}\msvcp80.dll"
+    File "${SRC_DIR}\msvcr80.dll"
+    File "${SRC_DIR}\Microsoft.VC80.CRT.manifest"
+    File "${SRC_DIR}\msvcm80d.dll"
+    File "${SRC_DIR}\msvcp80d.dll"
+    File "${SRC_DIR}\msvcr80d.dll"
+    File "${SRC_DIR}\Microsoft.VC80.DebugCRT.manifest"
+    File "${SRC_DIR}\pthreadVCE.dll"
+!endif
+!if "${BUILD_TOOLS}" == "MinGW"
+    File "${SRC_DIR}\mingwm10.dll"
+    File "${SRC_DIR}\pthreadGCE.dll"
+!endif
+    File "${SRC_DIR}\libeay32.dll"
+    File "${SRC_DIR}\ssleay32.dll"
+    File "${SRC_DIR}\zlib1.dll"
+!if "${BUILD_TOOLS}" == "VC8"
+    File "${SRC_DIR}\zlib1.dll.manifest"
+!endif
+!If "${BUILD_TOOLS}" == "VC8_DEBUG"
+    File "${SRC_DIR}\zlib1.dll.manifest"
+!endif
+    File "/oname=$INSTDIR\openssl.cnf" "${SRC_DIR}\openssl.cnf"
+    File "${SRC_DIR}\openssl.exe"
+    File "${SRC_DIR}\bsleep.exe"
+    File "${SRC_DIR}\bsmtp.exe"
+    File "${SRC_DIR}\bacula.dll"
+    File "${SRC_DIR}\expr64.exe"
+    File "${SRC_DIR}\snooze.exe"
+
+    CreateShortCut "$SMPROGRAMS\Bacula\Documentation\View Readme.lnk" "write.exe" '"$INSTDIR\Readme.txt"'
+
+    StrCpy $CommonFilesDone 1
+  ${EndIf}
+FunctionEnd
+
+Section "-Initialize"
+  ${If} $MySQLPath != ""
+    DetailPrint "Found MySQL (version $MySQLVersion)"
+  ${EndIf}
+  ${If} $PostgreSQLPath != ""
+    DetailPrint "Found PostgreSQL (version $PostgreSQLVersion)"
+  ${EndIf}
+
+  WriteRegStr   HKLM Software\Bacula InstallLocation "$INSTDIR"
+
+  Call GetSelectedComponents
+  Pop $R2
+  WriteRegDWORD HKLM Software\Bacula Components $R2
+
+  WriteRegDWORD HKLM Software\Bacula Database $ConfigDirectorDB
+
+  ; remove start menu items
+  SetShellVarContext all
+
+  Delete /REBOOTOK "$SMPROGRAMS\Bacula\Configuration\*"
+  Delete /REBOOTOK "$SMPROGRAMS\Bacula\Documentation\*"
+  Delete /REBOOTOK "$SMPROGRAMS\Bacula\*"
+  RMDir "$SMPROGRAMS\Bacula\Configuration"
+  RMDir "$SMPROGRAMS\Bacula\Documentation"
+  RMDir "$SMPROGRAMS\Bacula"
+  CreateDirectory "$SMPROGRAMS\Bacula"
+  CreateDirectory "$SMPROGRAMS\Bacula\Configuration"
+  CreateDirectory "$SMPROGRAMS\Bacula\Documentation"
+
+  CreateDirectory "$INSTDIR"
+  CreateDirectory "$INSTDIR\bin"
+  CreateDirectory "$APPDATA\Bacula"
+  CreateDirectory "$APPDATA\Bacula\Work"
+  CreateDirectory "$APPDATA\Bacula\Spool"
+
+  SetOutPath "$INSTDIR"
+  File "..\..\..\LICENSE"
+  Delete /REBOOTOK "$INSTDIR\bin\License.txt"
+
+  FileOpen $R1 $PLUGINSDIR\config.sed w
+  FileWrite $R1 "s;@VERSION@;${VERSION};g$\r$\n"
+  FileWrite $R1 "s;@DATE@;${__DATE__};g$\r$\n"
+  FileWrite $R1 "s;@DISTNAME@;Windows;g$\r$\n"
+
+!If "$BUILD_TOOLS" == "MinGW"
+  StrCpy $R2 "MinGW32"
+!Else
+  StrCpy $R2 "MVS"
+!EndIf
+
+  Call GetHostName
+  Exch $R3
+  Pop $R3
+
+  FileWrite $R1 "s;@DISTVER@;$R2;g$\r$\n"
+
+  ${StrRep} $R2 "$APPDATA\Bacula\Work" "\" "\\\\"
+  FileWrite $R1 's;@working_dir@;$R2;g$\r$\n'
+  ${StrRep} $R2 "$APPDATA\Bacula\Work" "\" "\\"
+  FileWrite $R1 's;@working_dir_cmd@;$R2;g$\r$\n'
+
+  ${StrRep} $R2 "$INSTDIR\bin" "\" "\\\\"
+  FileWrite $R1 's;@bin_dir@;$R2;g$\r$\n'
+  ${StrRep} $R2 "$INSTDIR\bin" "\" "\\"
+  FileWrite $R1 's;@bin_dir_cmd@;$R2;g$\r$\n'
+
+  ${StrRep} $R2 "$INSTDIR\bin\fdplugins" "\" "\\\\"
+  FileWrite $R1 's;@fdplugins_dir@;$R2;g$\r$\n'
+
+  ${StrRep} $R2 "$INSTDIR" "\" "/"
+  FileWrite $R1 "s;@BUILD_DIR@;$R2;g$\r$\n"
+
+  Call IsDirectorSelected
+  Pop $R2
+  ${If} $R2 = 1
+    FileWrite $R1 "s;@director_address@;$LocalHostAddress;g$\r$\n"
+  ${Else}
+    ${If} "$ConfigDirectorAddress" != ""
+      FileWrite $R1 "s;@director_address@;$ConfigDirectorAddress;g$\r$\n"
+    ${EndIf}
+  ${EndIf}
+
+  FileWrite $R1 "s;@client_address@;$LocalHostAddress;g$\r$\n"
+  FileWrite $R1 "s;@storage_address@;$LocalHostAddress;g$\r$\n"
+
+  ${If} "$ConfigClientName" != ""
+    FileWrite $R1 "s;@client_name@;$ConfigClientName;g$\r$\n"
+  ${EndIf}
+  ${If} "$ConfigClientPort" != ""
+    FileWrite $R1 "s;@client_port@;$ConfigClientPort;g$\r$\n"
+  ${EndIf}
+  ${If} "$ConfigClientMaxJobs" != ""
+    FileWrite $R1 "s;@client_maxjobs@;$ConfigClientMaxJobs;g$\r$\n"
+  ${EndIf}
+  ${If} "$ConfigClientPassword" != ""
+    FileWrite $R1 "s;@client_password@;$ConfigClientPassword;g$\r$\n"
+  ${EndIf}
+  ${If} "$ConfigStorageName" != ""
+    FileWrite $R1 "s;@storage_name@;$ConfigStorageName;g$\r$\n"
+  ${EndIf}
+  ${If} "$ConfigStoragePort" != ""
+    FileWrite $R1 "s;@storage_port@;$ConfigStoragePort;g$\r$\n"
+  ${EndIf}
+  ${If} "$ConfigStorageMaxJobs" != ""
+    FileWrite $R1 "s;@storage_maxjobs@;$ConfigStorageMaxJobs;g$\r$\n"
+  ${EndIf}
+  ${If} "$ConfigStoragePassword" != ""
+    FileWrite $R1 "s;@storage_password@;$ConfigStoragePassword;g$\r$\n"
+  ${EndIf}
+  ${If} "$ConfigDirectorName" != ""
+    FileWrite $R1 "s;@director_name@;$ConfigDirectorName;g$\r$\n"
+  ${EndIf}
+  ${If} "$ConfigDirectorPort" != ""
+    FileWrite $R1 "s;@director_port@;$ConfigDirectorPort;g$\r$\n"
+  ${EndIf}
+  ${If} "$ConfigDirectorMaxJobs" != ""
+    FileWrite $R1 "s;@director_maxjobs@;$ConfigDirectorMaxJobs;g$\r$\n"
+  ${EndIf}
+  ${If} "$ConfigDirectorPassword" != ""
+    FileWrite $R1 "s;@director_password@;$ConfigDirectorPassword;g$\r$\n"
+  ${EndIf}
+  ${If} "$ConfigDirectorMailServer" != ""
+    FileWrite $R1 "s;@smtp_host@;$ConfigDirectorMailServer;g$\r$\n"
+  ${EndIf}
+  ${If} "$ConfigDirectorMailAddress" != ""
+    FileWrite $R1 "s;@job_email@;$ConfigDirectorMailAddress;g$\r$\n"
+  ${EndIf}
+  ${If} "$ConfigMonitorName" != ""
+    FileWrite $R1 "s;@monitor_name@;$ConfigMonitorName;g$\r$\n"
+  ${EndIf}
+  ${If} "$ConfigMonitorPassword" != ""
+    FileWrite $R1 "s;@monitor_password@;$ConfigMonitorPassword;g$\r$\n"
+  ${EndIf}
+
+  ${If} $ConfigDirectorDB = 1
+    ${If} $MySQLPath != ""
+      ${StrRep} $R2 "$MySQLPath\bin" "\" "\\"
+      FileWrite $R1 "s;@SQL_BINDIR@;$R2;g$\r$\n"
+    ${EndIf}
+  ${ElseIf} $ConfigDirectorDB = 2
+    ${If} $PostgreSQLPath != ""
+      ${StrRep} $R2 "$PostgreSQLPath\bin" "\" "\\"
+      FileWrite $R1 "s;@SQL_BINDIR@;$R2;g$\r$\n"
+    ${EndIf}
+  ${EndIf}
+
+  FileClose $R1
+
+  ${If} $InstallType = ${MigrateInstall}
+    FileOpen $R1 $PLUGINSDIR\migrate.sed w
+    ${StrRep} $R2 "$APPDATA\Bacula\Work" "\" "\\\\"
+    FileWrite $R1 's;\(Working *Directory *= *\)[^ ][^ ]*.*$$;\1"$R2";$\r$\n'
+    FileWrite $R1 's;\(Pid *Directory *= *\)[^ ][^ ]*.*$$;\1"$R2";$\r$\n'
+    FileClose $R1
+  ${EndIf}
+
+  ${If} ${FileExists} "$OldInstallDir\bin\bacula-fd.exe"
+    nsExec::ExecToLog '"$OldInstallDir\bin\bacula-fd.exe" /kill'     ; Shutdown any bacula that could be running
+    Sleep 3000
+    nsExec::ExecToLog '"$OldInstallDir\bin\bacula-fd.exe" /remove'   ; Remove existing service
+  ${EndIf}
+
+  ${If} ${FileExists} "$OldInstallDir\bin\bacula-sd.exe"
+    nsExec::ExecToLog '"$OldInstallDir\bin\bacula-sd.exe" /kill'     ; Shutdown any bacula that could be running
+    Sleep 3000
+    nsExec::ExecToLog '"$OldInstallDir\bin\bacula-sd.exe" /remove'   ; Remove existing service
+  ${EndIf}
+
+  ${If} ${FileExists} "$OldInstallDir\bin\bacula-dir.exe"
+    nsExec::ExecToLog '"$OldInstallDir\bin\bacula-dir.exe" /kill'     ; Shutdown any bacula that could be running
+    Sleep 3000
+    nsExec::ExecToLog '"$OldInstallDir\bin\bacula-dir.exe" /remove'   ; Remove existing service
+  ${EndIf}
+
+SectionEnd
+
+SectionGroup "Client" SecGroupClient
+
+Section "File Service" SecFileDaemon
+  SectionIn 1 2 3
+
+  SetOutPath "$INSTDIR\bin\fdplugins"
+  File "${SRC_DIR}\exchange-fd.dll"
+
+  SetOutPath "$INSTDIR\bin"
+
+  File "${SRC_DIR}\bacula-fd.exe"
+
+  ${If} $InstallType = ${MigrateInstall}
+  ${AndIf} ${FileExists} "$OldInstallDir\bin\bacula-fd.conf"
+    CopyFiles "$OldInstallDir\bin\bacula-fd.conf" "$APPDATA\Bacula"
+    nsExec::ExecToLog '$PLUGINSDIR\sed.exe -f "$PLUGINSDIR\migrate.sed" -i.bak "$APPDATA\Bacula\bacula-fd.conf"'
+  ${Else}
+    File "/oname=$PLUGINSDIR\bacula-fd.conf" "bacula-fd.conf.in"
+
+    StrCpy $0 "$APPDATA\Bacula"
+    StrCpy $1 bacula-fd.conf
+    Call ConfigEditAndCopy
+  ${EndIf}
+
+  StrCpy $0 bacula-fd
+  StrCpy $1 "File Service"
+  StrCpy $2 $ConfigClientInstallService
+  StrCpy $3 $ConfigClientStartService
+
+  Call InstallDaemon
+
+  CreateShortCut "$SMPROGRAMS\Bacula\Configuration\Edit Client Configuration.lnk" "write.exe" '"$APPDATA\Bacula\bacula-fd.conf"'
+SectionEnd
+
+SectionGroupEnd
+
+SectionGroup "Server" SecGroupServer
+
+Section "Storage Service" SecStorageDaemon
+  SectionIn 2 3
+
+  SetOutPath "$INSTDIR\bin"
+
+  File "${SRC_DIR}\loaderinfo.exe"
+  File "${SRC_DIR}\mt.exe"
+  File "${SRC_DIR}\mtx.exe"
+  File "${SRC_DIR}\scsitape.exe"
+  File "${SRC_DIR}\tapeinfo.exe"
+  File "${SRC_DIR}\bacula-sd.exe"
+  File "${SRC_DIR}\bcopy.exe"
+  File "${SRC_DIR}\bextract.exe"
+  File "${SRC_DIR}\bls.exe"
+  File "${SRC_DIR}\bscan.exe"
+  File "${SRC_DIR}\btape.exe"
+  File "${SRC_DIR}\scsilist.exe"
+  File "${SRC_DIR}\mkisofs.exe"
+  File "${SRC_DIR}\growisofs.exe"
+  File "${SRC_DIR}\dvd-ram-control.exe"
+  File "${SRC_DIR}\dvd+rw-booktype.exe"
+  File "${SRC_DIR}\dvd+rw-format.exe"
+  File "${SRC_DIR}\dvd+rw-mediainfo.exe"
+
+  File "/oname=$PLUGINSDIR\mtx-changer.cmd" "${SRC_DIR}\mtx-changer.cmd"
+
+  StrCpy $0 "$INSTDIR\bin"
+  StrCpy $1 mtx-changer.cmd
+  Call ConfigEditAndCopy
+
+  File "/oname=$PLUGINSDIR\disk-changer.cmd" "${SRC_DIR}\disk-changer.cmd"
+
+  StrCpy $0 "$INSTDIR\bin"
+  StrCpy $1 disk-changer.cmd
+  Call ConfigEditAndCopy
+
+  File "/oname=$PLUGINSDIR\dvd-handler.cmd" "${SRC_DIR}\dvd-handler.cmd"
+
+  StrCpy $0 "$INSTDIR\bin"
+  StrCpy $1 dvd-handler.cmd
+  Call ConfigEditAndCopy
+
+  File "/oname=$PLUGINSDIR\bacula-sd.conf" "bacula-sd.conf.in"
+
+  StrCpy $0 "$APPDATA\Bacula"
+  StrCpy $1 bacula-sd.conf
+  Call ConfigEditAndCopy
+
+  StrCpy $0 bacula-sd
+  StrCpy $1 "Storage Service"
+  StrCpy $2 $ConfigStorageInstallService
+  StrCpy $3 $ConfigStorageStartService
+  Call InstallDaemon
+
+  CreateShortCut "$SMPROGRAMS\Bacula\Configuration\List Devices.lnk" "$INSTDIR\bin\scsilist.exe" "/pause"
+  CreateShortCut "$SMPROGRAMS\Bacula\Configuration\Edit Storage Configuration.lnk" "write.exe" '"$APPDATA\Bacula\bacula-sd.conf"'
+SectionEnd
+
+Section "Director Service" SecDirectorDaemon
+  SectionIn 2 3
+
+  SetOutPath "$INSTDIR\bin"
+
+  ${If} $ConfigDirectorDB = 1
+    File /oname=bacula_cats.dll "${SRC_DIR}\cats_mysql.dll"
+    File "${SRC_DIR}\libmysql.dll"
+    File /oname=$PLUGINSDIR\create_database.cmd ${SRC_DIR}\create_mysql_database.cmd
+    File /oname=$PLUGINSDIR\drop_database.cmd ${SRC_DIR}\drop_mysql_database.cmd
+    File /oname=$PLUGINSDIR\make_tables.cmd ${SRC_DIR}\make_mysql_tables.cmd
+    File ${SRC_DIR}\make_mysql_tables.sql
+    File /oname=$PLUGINSDIR\drop_tables.cmd ${SRC_DIR}\drop_mysql_tables.cmd
+    File ${SRC_DIR}\drop_mysql_tables.sql
+    File /oname=$PLUGINSDIR\grant_privileges.cmd ${SRC_DIR}\grant_mysql_privileges.cmd
+    File ${SRC_DIR}\grant_mysql_privileges.sql
+    File /oname=$PLUGINSDIR\make_catalog_backup.cmd ${SRC_DIR}\make_mysql_catalog_backup.cmd
+  ${ElseIf} $ConfigDirectorDB = 2
+    File /oname=bacula_cats.dll "${SRC_DIR}\cats_postgresql.dll"
+    File "${SRC_DIR}\libpq.dll"
+!if "${BUILD_TOOLS}" == "VC8"
+    File "${SRC_DIR}\comerr32.dll"
+    File "${SRC_DIR}\libintl-2.dll"
+    File "${SRC_DIR}\libiconv-2.dll"
+    File "${SRC_DIR}\krb5_32.dll"
+!endif
+!If "${BUILD_TOOLS}" == "VC8_DEBUG"
+    File "${SRC_DIR}\comerr32.dll"
+    File "${SRC_DIR}\libintl-2.dll"
+    File "${SRC_DIR}\libiconv-2.dll"
+    File "${SRC_DIR}\krb5_32.dll"
+!endif
+    File /oname=$PLUGINSDIR\create_database.cmd ${SRC_DIR}\create_postgresql_database.cmd
+    File /oname=$PLUGINSDIR\drop_database.cmd ${SRC_DIR}\drop_postgresql_database.cmd
+    File /oname=$PLUGINSDIR\make_tables.cmd ${SRC_DIR}\make_postgresql_tables.cmd
+    File ${SRC_DIR}\create_postgresql_database.sql
+    File ${SRC_DIR}\make_postgresql_tables.sql
+    File /oname=$PLUGINSDIR\drop_tables.cmd ${SRC_DIR}\drop_postgresql_tables.cmd
+    File ${SRC_DIR}\drop_postgresql_tables.sql
+    File /oname=$PLUGINSDIR\grant_privileges.cmd ${SRC_DIR}\grant_postgresql_privileges.cmd
+    File ${SRC_DIR}\grant_postgresql_privileges.sql
+    File /oname=$PLUGINSDIR\make_catalog_backup.cmd ${SRC_DIR}\make_postgresql_catalog_backup.cmd
+  ${ElseIf} $ConfigDirectorDB = 3
+    File "${SRC_DIR}\sqlite3.exe"
+!if "${BUILD_TOOLS}" == "VC8"
+    File "${SRC_DIR}\sqlite3.exe.manifest"
+!endif
+!If "${BUILD_TOOLS}" == "VC8_DEBUG"
+    File "${SRC_DIR}\sqlite3.exe.manifest"
+!endif
+    File /oname=bacula_cats.dll "${SRC_DIR}\cats_sqlite3.dll"
+    File /oname=$PLUGINSDIR\create_database.cmd ${SRC_DIR}\create_sqlite3_database.cmd
+    File /oname=$PLUGINSDIR\drop_database.cmd ${SRC_DIR}\drop_sqlite3_database.cmd
+    File /oname=$PLUGINSDIR\make_tables.cmd ${SRC_DIR}\make_sqlite3_tables.cmd
+    File ${SRC_DIR}\make_sqlite3_tables.sql
+    File /oname=$PLUGINSDIR\drop_tables.cmd ${SRC_DIR}\drop_sqlite3_tables.cmd
+    File /oname=$PLUGINSDIR\grant_privileges.cmd ${SRC_DIR}\grant_sqlite3_privileges.cmd
+    File /oname=$PLUGINSDIR\make_catalog_backup.cmd ${SRC_DIR}\make_sqlite3_catalog_backup.cmd
+  ${EndIf}
+
+  File "${SRC_DIR}\bacula-dir.exe"
+  File "${SRC_DIR}\dbcheck.exe"
+
+  File "/oname=$PLUGINSDIR\delete_catalog_backup.cmd" "${SRC_DIR}\delete_catalog_backup.cmd"
+
+  StrCpy $0 "$INSTDIR\bin"
+  
+  StrCpy $1 create_database.cmd
+  Call ConfigEditAndCopy
+
+  StrCpy $1 drop_database.cmd
+  Call ConfigEditAndCopy
+
+  StrCpy $1 make_tables.cmd
+  Call ConfigEditAndCopy
+
+  StrCpy $1 drop_tables.cmd
+  Call ConfigEditAndCopy
+
+  StrCpy $1 grant_privileges.cmd
+  Call ConfigEditAndCopy
+
+  StrCpy $1 make_catalog_backup.cmd
+  Call ConfigEditAndCopy
+
+  StrCpy $1 delete_catalog_backup.cmd
+  Call ConfigEditAndCopy
+
+  File "${SRC_DIR}\query.sql"
+
+  File "/oname=$PLUGINSDIR\bacula-dir.conf" "bacula-dir.conf.in"
+
+  StrCpy $0 "$APPDATA\Bacula"
+  StrCpy $1 bacula-dir.conf
+  Call ConfigEditAndCopy
+
+  StrCpy $0 bacula-dir
+  StrCpy $1 "Director Service"
+  StrCpy $2 $ConfigDirectorInstallService
+  StrCpy $3 $ConfigDirectorStartService
+  Call InstallDaemon
+
+  CreateShortCut "$SMPROGRAMS\Bacula\Configuration\Edit Director Configuration.lnk" "write.exe" '"$APPDATA\Bacula\bacula-dir.conf"'
+SectionEnd
+
+SectionGroupEnd
+
+SectionGroup "Consoles" SecGroupConsoles
+
+Section "Command Console" SecConsole
+  SectionIn 1 2 3
+
+  SetOutPath "$INSTDIR\bin"
+
+  File "${SRC_DIR}\bconsole.exe"
+  Call InstallCommonFiles
+
+  ${If} $InstallType = ${MigrateInstall}
+  ${AndIf} ${FileExists} "$OldInstallDir\bin\bconsole.conf"
+    CopyFiles "$OldInstallDir\bin\bconsole.conf" "$APPDATA\Bacula"
+  ${Else}
+    File "/oname=$PLUGINSDIR\bconsole.conf" "bconsole.conf.in"
+    StrCpy $0 "$APPDATA\Bacula"
+    StrCpy $1 bconsole.conf
+    Call ConfigEditAndCopy
+  ${EndIf}
+
+  CreateShortCut "$SMPROGRAMS\Bacula\bconsole.lnk" "$INSTDIR\bin\bconsole.exe" '-c "$APPDATA\Bacula\bconsole.conf"' "$INSTDIR\bin\bconsole.exe" 0
+  CreateShortCut "$SMPROGRAMS\Bacula\Configuration\Edit Command Console Configuration.lnk" "write.exe" '"$APPDATA\Bacula\bconsole.conf"'
+
+SectionEnd
+
+Section "Bat Console" SecBatConsole
+  SectionIn 1 2 3
+  
+  SetOutPath "$INSTDIR\bin"
+
+  Call InstallCommonFiles
+  File "${SRC_DIR}\QtCore4.dll"
+  File "${SRC_DIR}\QtGui4.dll"
+
+  File "${SRC_DIR}\bat.exe"
+
+  ${If} $InstallType = ${MigrateInstall}
+  ${AndIf} ${FileExists} "$OldInstallDir\bin\bat.conf"
+    CopyFiles "$OldInstallDir\bin\bat.conf" "$APPDATA\Bacula"
+  ${Else}
+    File "/oname=$PLUGINSDIR\bat.conf" "bat.conf.in"
+    StrCpy $0 "$APPDATA\Bacula"
+    StrCpy $1 bat.conf
+    Call ConfigEditAndCopy
+  ${EndIf}
+
+  ; Create Start Menu entry
+  CreateShortCut "$SMPROGRAMS\Bacula\Bat.lnk" "$INSTDIR\bin\bat.exe" '-c "$APPDATA\Bacula\bat.conf"' "$INSTDIR\bin\bat.exe" 0
+  CreateShortCut "$SMPROGRAMS\Bacula\Configuration\Edit Bat Configuration.lnk" "write.exe" '"$APPDATA\Bacula\bat.conf"'
+SectionEnd
+
+
+Section "Graphical Console" SecWxConsole
+  SectionIn 1 2 3
+  
+  SetOutPath "$INSTDIR\bin"
+
+  Call InstallCommonFiles
+!if "${BUILD_TOOLS}" == "VC8"
+  File "${SRC_DIR}\wxbase28_vc_bacula.dll"
+  File "${SRC_DIR}\wxmsw28_core_vc_bacula.dll"
+!endif
+!If "${BUILD_TOOLS}" == "VC8_DEBUG"
+  File "${SRC_DIR}\wxbase28_vc_bacula.dll"
+  File "${SRC_DIR}\wxmsw28_core_vc_bacula.dll"
+!endif
+!if "${BUILD_TOOLS}" == "MinGW"
+  File "${SRC_DIR}\wxbase28_gcc_bacula.dll"
+  File "${SRC_DIR}\wxmsw28_core_gcc_bacula.dll"
+!endif
+
+  File "${SRC_DIR}\bwx-console.exe"
+
+  ${If} $InstallType = ${MigrateInstall}
+  ${AndIf} ${FileExists} "$OldInstallDir\bin\bwx-console.conf"
+    CopyFiles "$OldInstallDir\bin\bwx-console.conf" "$APPDATA\Bacula"
+  ${Else}
+    File "/oname=$PLUGINSDIR\bwx-console.conf" "bwx-console.conf.in"
+    StrCpy $0 "$APPDATA\Bacula"
+    StrCpy $1 bwx-console.conf
+    Call ConfigEditAndCopy
+  ${EndIf}
+
+  ; Create Start Menu entry
+  CreateShortCut "$SMPROGRAMS\Bacula\bwx-console.lnk" "$INSTDIR\bin\bwx-console.exe" '-c "$APPDATA\Bacula\bwx-console.conf"' "$INSTDIR\bin\bwx-console.exe" 0
+  CreateShortCut "$SMPROGRAMS\Bacula\Configuration\Edit Graphical Console Configuration.lnk" "write.exe" '"$APPDATA\Bacula\bwx-console.conf"'
+SectionEnd
+
+SectionGroupEnd
+
+SectionGroup "Documentation" SecGroupDocumentation
+
+Section "Documentation (Acrobat Format)" SecDocPdf
+  SectionIn 1 2 3
+
+  SetOutPath "$INSTDIR\doc"
+  CreateDirectory "$INSTDIR\doc"
+
+  File "${SRC_DIR}\docs\manuals\en\console\console.pdf"
+  File "${SRC_DIR}\docs\manuals\en\misc\misc.pdf"
+  File "${SRC_DIR}\docs\manuals\en\main\main.pdf"
+  File "${SRC_DIR}\docs\manuals\en\utility\utility.pdf"
+  File "${SRC_DIR}\docs\manuals\en\problems\problems.pdf"
+  CreateShortCut "$SMPROGRAMS\Bacula\Documentation\Console.lnk" '"$INSTDIR\doc\console.pdf"'
+  CreateShortCut "$SMPROGRAMS\Bacula\Documentation\Main.lnk" '"$INSTDIR\doc\main.pdf"'
+  CreateShortCut "$SMPROGRAMS\Bacula\Documentation\Misc.lnk" '"$INSTDIR\doc\misc.pdf"'
+  CreateShortCut "$SMPROGRAMS\Bacula\Documentation\Utility.lnk" '"$INSTDIR\doc\utility.pdf"'
+  CreateShortCut "$SMPROGRAMS\Bacula\Documentation\Problems.lnk" '"$INSTDIR\doc\problems.pdf"'
+SectionEnd
+
+Section "Documentation (HTML Format)" SecDocHtml
+  SectionIn 3
+
+  SetOutPath "$INSTDIR\doc"
+  CreateDirectory "$INSTDIR\doc"
+
+; File "${SRC_DIR}\manual\bacula\*.html"
+; File "${SRC_DIR}\manual\bacula\*.png"
+; File "${SRC_DIR}\manual\bacula\*.css"
+; CreateShortCut "$SMPROGRAMS\Bacula\Documentation\Manual (HTML).lnk" '"$INSTDIR\doc\index.html"'
+SectionEnd
+
+SectionGroupEnd
+
+Section "-Finish"
+  Push $R0
+
+  ${If} $OsIsNT = 1
+    nsExec::ExecToLog 'cmd.exe /C echo Y|cacls "$INSTDIR" /T /G SYSTEM:F Administrators:F'
+    nsExec::ExecToLog 'cmd.exe /C echo Y|cacls "$APPDATA\Bacula" /T /G SYSTEM:F Administrators:F'
+  ${EndIf}
+
+  ; Write the uninstall keys for Windows & create Start Menu entry
+  WriteRegStr   HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "DisplayName" "Bacula"
+  WriteRegStr   HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "InstallLocation" "$INSTDIR"
+  WriteRegStr   HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "DisplayVersion" "${VERSION}"
+  ${StrTok} $R0 "${VERSION}" "." 0 0
+  WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "VersionMajor" $R0
+  ${StrTok} $R0 "${VERSION}" "." 1 0
+  WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "VersionMinor" $R0
+  WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "NoModify" 1
+  WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "NoRepair" 1
+  WriteRegStr   HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "URLUpdateInfo" "http://sourceforge.net/project/showfiles.php?group_id=50727"
+  WriteRegStr   HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "URLInfoAbout" "http://www.bacula.org"
+  WriteRegStr   HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "HelpLink" "http://www.bacula.org/?page=support"
+  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
+  Pop $R0
+SectionEnd
+
+; Extra Page descriptions
+
+LangString DESC_SecFileDaemon ${LANG_ENGLISH} "Install Bacula File Daemon on this system."
+LangString DESC_SecStorageDaemon ${LANG_ENGLISH} "Install Bacula Storage Daemon on this system."
+LangString DESC_SecDirectorDaemon ${LANG_ENGLISH} "Install Bacula Director Daemon on this system."
+LangString DESC_SecConsole ${LANG_ENGLISH} "Install command console program on this system."
+LangString DESC_SecBatConsole ${LANG_ENGLISH} "Install Bat graphical console program on this system."
+LangString DESC_SecWxConsole ${LANG_ENGLISH} "Install wxWidgets graphical console program on this system."
+LangString DESC_SecDocPdf ${LANG_ENGLISH} "Install documentation in Acrobat format on this system."
+LangString DESC_SecDocHtml ${LANG_ENGLISH} "Install documentation in HTML format on this system."
+
+LangString TITLE_ConfigPage1 ${LANG_ENGLISH} "Configuration"
+LangString SUBTITLE_ConfigPage1 ${LANG_ENGLISH} "Set installation configuration."
+
+LangString TITLE_ConfigPage2 ${LANG_ENGLISH} "Configuration (continued)"
+LangString SUBTITLE_ConfigPage2 ${LANG_ENGLISH} "Set installation configuration."
+
+LangString TITLE_InstallType ${LANG_ENGLISH} "Installation Type"
+LangString SUBTITLE_InstallType ${LANG_ENGLISH} "Choose installation type."
+
+LangString TITLE_WriteTemplates ${LANG_ENGLISH} "Create Templates"
+LangString SUBTITLE_WriteTemplates ${LANG_ENGLISH} "Create resource templates for inclusion in the Director's configuration file."
+
+!InsertMacro MUI_FUNCTION_DESCRIPTION_BEGIN
+  !InsertMacro MUI_DESCRIPTION_TEXT ${SecFileDaemon} $(DESC_SecFileDaemon)
+  !InsertMacro MUI_DESCRIPTION_TEXT ${SecStorageDaemon} $(DESC_SecStorageDaemon)
+  !InsertMacro MUI_DESCRIPTION_TEXT ${SecDirectorDaemon} $(DESC_SecDirectorDaemon)
+  !InsertMacro MUI_DESCRIPTION_TEXT ${SecConsole} $(DESC_SecConsole)
+  !InsertMacro MUI_DESCRIPTION_TEXT ${SecBatConsole} $(DESC_SecBatConsole)
+  !InsertMacro MUI_DESCRIPTION_TEXT ${SecWxConsole} $(DESC_SecWxConsole)
+  !InsertMacro MUI_DESCRIPTION_TEXT ${SecDocPdf} $(DESC_SecDocPdf)
+  !InsertMacro MUI_DESCRIPTION_TEXT ${SecDocHtml} $(DESC_SecDocHtml)
+!InsertMacro MUI_FUNCTION_DESCRIPTION_END
+
+; Uninstall section
+
+UninstallText "This will uninstall Bacula. Hit next to continue."
+
+Section "Uninstall"
+  ; Shutdown any baculum that could be running
+  nsExec::ExecToLog '"$INSTDIR\bin\bacula-fd.exe" /kill'
+  nsExec::ExecToLog '"$INSTDIR\bin\bacula-sd.exe" /kill'
+  nsExec::ExecToLog '"$INSTDIR\bin\bacula-dir.exe" /kill'
+  Sleep 3000
+
+  ReadRegDWORD $R0 HKLM "Software\Bacula" "Service_Bacula-fd"
+  ${If} $R0 = 1
+    ; Remove bacula service
+    nsExec::ExecToLog '"$INSTDIR\bin\bacula-fd.exe" /remove'
+    nsExec::ExecToLog '"$INSTDIR\bin\exchange-fd.dll" /remove'
+  ${EndIf}
+  
+  ReadRegDWORD $R0 HKLM "Software\Bacula" "Service_Bacula-sd"
+  ${If} $R0 = 1
+    ; Remove bacula service
+    nsExec::ExecToLog '"$INSTDIR\bin\bacula-sd.exe" /remove'
+  ${EndIf}
+  
+  ReadRegDWORD $R0 HKLM "Software\Bacula" "Service_Bacula-dir"
+  ${If} $R0 = 1
+    ; Remove bacula service
+    nsExec::ExecToLog '"$INSTDIR\bin\bacula-dir.exe" /remove'
+  ${EndIf}
+  
+  ; 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\*"
+  RMDir "$SMPROGRAMS\Bacula"
+
+  ; remove files and uninstaller (preserving config for now)
+  Delete /REBOOTOK "$INSTDIR\bin\*"
+  Delete /REBOOTOK "$INSTDIR\doc\*"
+  Delete /REBOOTOK "$INSTDIR\*"
+
+  ; Check for existing installation
+  MessageBox MB_YESNO|MB_ICONQUESTION \
+  "Would you like to delete the current configuration files and the working state file?" IDNO NoDel
+    Delete /REBOOTOK "$APPDATA\Bacula\*"
+    Delete /REBOOTOK "$APPDATA\Bacula\Work\*"
+    Delete /REBOOTOK "$APPDATA\Bacula\Spool\*"
+    Delete /REBOOTOK "$PLUGINSDIR\bacula-*.conf"
+    Delete /REBOOTOK "$PLUGINSDIR\*console.conf"
+    Delete /REBOOTOK "$PLUGINSDIR\*conf.in"
+    Delete /REBOOTOK "$PLUGINSDIR\openssl.exe"
+    Delete /REBOOTOK "$PLUGINSDIR\libeay32.dll"
+    Delete /REBOOTOK "$PLUGINSDIR\ssleay32.dll"
+    Delete /REBOOTOK "$PLUGINSDIR\sed.exe"    
+    Delete /REBOOTOK "$PLUGINSDIR\pw.txt"     
+    Delete /REBOOTOK "$PLUGINSDIR\*.sed" 
+    Delete /REBOOTOK "$PLUGINSDIR\*.cmd"    
+    Delete /REBOOTOK "$PLUGINSDIR\*.sql"    
+    RMDir "$APPDATA\Bacula\Work"
+    RMDir "$APPDATA\Bacula\Spool"
+    RMDir "$APPDATA\Bacula"
+NoDel:
+
+  ; remove directories used
+  RMDir "$INSTDIR\bin"
+  RMDir "$INSTDIR\doc"
+  RMDir "$INSTDIR"
+SectionEnd
+
+;
+; $0 - Service Name (ie Bacula-FD)
+; $1 - Service Description (ie Bacula File Daemon)
+; $2 - Install as Service
+; $3 - Start Service now
+;
+Function InstallDaemon
+  Call InstallCommonFiles
+
+  WriteRegDWORD HKLM "Software\Bacula" "Service_$0" $2
+  
+  ${If} $2 = 1
+    nsExec::ExecToLog '"$INSTDIR\bin\$0.exe" /install -c "$APPDATA\Bacula\$0.conf"'
+
+    ${If} $OsIsNT <> 1
+      File "Start.bat"
+      File "Stop.bat"
+    ${EndIf}
+
+    ; Start the service?
+
+    ${If} $3 = 1  
+      ${If} $OsIsNT = 1
+        nsExec::ExecToLog 'net start $0'
+      ${Else}
+        Exec '"$INSTDIR\bin\$0.exe" -c "$APPDATA\Bacula\$0.conf"'
+      ${EndIf}
+    ${EndIf}
+  ${Else}
+    CreateShortCut "$SMPROGRAMS\Bacula\Start $1.lnk" "$INSTDIR\bin\$0.exe" '-c "$APPDATA\Bacula\$0.conf"' "$INSTDIR\bin\$0.exe" 0
+  ${EndIf}
+FunctionEnd
+
+Function GetComputerName
+  Push $R0
+  Push $R1
+  Push $R2
+
+  System::Call "kernel32::GetComputerNameA(t .R0, *i ${NSIS_MAX_STRLEN} R1) i.R2"
+
+  ${StrCase} $R0 $R0 "L"
+
+  Pop $R2
+  Pop $R1
+  Exch $R0
+FunctionEnd
+
+!define ComputerNameDnsFullyQualified   3
+
+Function GetHostName
+  Push $R0
+  Push $R1
+  Push $R2
+
+  ${If} $OsIsNT = 1
+    System::Call "kernel32::GetComputerNameExA(i ${ComputerNameDnsFullyQualified}, t .R0, *i ${NSIS_MAX_STRLEN} R1) i.R2 ?e"
+    ${If} $R2 = 0
+      Pop $R2
+      DetailPrint "GetComputerNameExA failed - LastError = $R2"
+      Call GetComputerName
+      Pop $R0
+    ${Else}
+      Pop $R2
+    ${EndIf}
+  ${Else}
+    Call GetComputerName
+    Pop $R0
+  ${EndIf}
+
+  Pop $R2
+  Pop $R1
+  Exch $R0
+FunctionEnd
+
+!define NameUserPrincipal 8
+
+Function GetUserName
+  Push $R0
+  Push $R1
+  Push $R2
+
+  ${If} $OsIsNT = 1
+    System::Call "secur32::GetUserNameExA(i ${NameUserPrincipal}, t .R0, *i ${NSIS_MAX_STRLEN} R1) i.R2 ?e"
+    ${If} $R2 = 0
+      Pop $R2
+      DetailPrint "GetUserNameExA failed - LastError = $R2"
+      Pop $R0
+      StrCpy $R0 ""
+    ${Else}
+      Pop $R2
+    ${EndIf}
+  ${Else}
+      StrCpy $R0 ""
+  ${EndIf}
+
+  ${If} $R0 == ""
+    System::Call "advapi32::GetUserNameA(t .R0, *i ${NSIS_MAX_STRLEN} R1) i.R2 ?e"
+    ${If} $R2 = 0
+      Pop $R2
+      DetailPrint "GetUserNameA failed - LastError = $R2"
+      StrCpy $R0 ""
+    ${Else}
+      Pop $R2
+    ${EndIf}
+  ${EndIf}
+
+  Pop $R2
+  Pop $R1
+  Exch $R0
+FunctionEnd
+
+Function ConfigEditAndCopy
+  Push $R1
+
+  ${If} ${FileExists} "$0\$1"
+    StrCpy $R1 ".new"
+  ${Else}
+    StrCpy $R1 ""
+  ${EndIf}
+
+  nsExec::ExecToLog '$PLUGINSDIR\sed.exe -f "$PLUGINSDIR\config.sed" -i.bak "$PLUGINSDIR\$1"'
+  CopyFiles "$PLUGINSDIR\$1" "$0\$1$R1"
+
+  Pop $R1
+FunctionEnd
+
+Function FindDatabaseApps
+  Push $R1
+
+  ReadRegStr $0 HKLM "Software\MySQL AB\MySQL Server 5.0" "Location"
+
+  ${If} $0 != ""
+    Call RemoveTrailingSlash
+    StrCpy $MySQLPath $0
+    ReadRegStr $0 HKLM "Software\MySQL AB\MySQL Server 5.0" "Version"
+    StrCpy $MySQLVersion $0
+  ${EndIf}
+
+  EnumRegKey $R1 HKLM "Software\PostgreSQL\Installations" 0
+  ${If} $R1 != ""
+    ReadRegStr $0 HKLM "Software\PostgreSQL\Installations\$R1" "Base Directory"
+    Call RemoveTrailingSlash
+    StrCpy $PostgreSQLPath $0
+    ReadRegStr $0 HKLM "Software\PostgreSQL\Installations\$R1" "Version"
+    StrCpy $PostgreSQLVersion $0
+  ${EndIf}
+
+  Pop $R1
+FunctionEnd
+
+Function RemoveTrailingSlash
+  Push $R1
+  StrCpy $R1 $0 "" -1
+  ${If} $R1 == "\"
+    StrCpy $0 $0 -1
+  ${EndIf}
+  Pop $R1
+FunctionEnd
+
+Function IsDirectorSelected
+  Push $R0
+  SectionGetFlags ${SecDirectorDaemon} $R0
+  IntOp $R0 $R0 & ${SF_SELECTED}
+  Exch $R0
+FunctionEnd
+
+Function GetSelectedComponents
+  Push $R0
+  StrCpy $R0 0
+  ${If} ${SectionIsSelected} ${SecFileDaemon}
+    IntOp $R0 $R0 | ${ComponentFile}
+  ${EndIf}
+  ${If} ${SectionIsSelected} ${SecStorageDaemon}
+    IntOp $R0 $R0 | ${ComponentStorage}
+  ${EndIf}
+  ${If} ${SectionIsSelected} ${SecDirectorDaemon}
+    IntOp $R0 $R0 | ${ComponentDirector}
+  ${EndIf}
+  ${If} ${SectionIsSelected} ${SecConsole}
+    IntOp $R0 $R0 | ${ComponentTextConsole}
+  ${EndIf}
+  ${If} ${SectionIsSelected} ${SecBatConsole}
+    IntOp $R0 $R0 | ${ComponentBatConsole}
+  ${EndIf}
+  ${If} ${SectionIsSelected} ${SecWxConsole}
+    IntOp $R0 $R0 | ${ComponentGUIConsole}
+  ${EndIf}
+  ${If} ${SectionIsSelected} ${SecDocPdf}
+    IntOp $R0 $R0 | ${ComponentPDFDocs}
+  ${EndIf}
+  ${If} ${SectionIsSelected} ${SecDocHtml}
+    IntOp $R0 $R0 | ${ComponentHTMLDocs}
+  ${EndIf}
+  Exch $R0
+FunctionEnd
+
+Function PageComponentsShow
+  ${If} $OsIsNT <> 1
+    Call DisableServerSections
+  ${EndIf}
+
+  Call SelectPreviousComponents
+  Call UpdateComponentUI
+FunctionEnd
+
+Function PageDirectoryPre
+  ${If} $AutomaticInstall = 1
+  ${OrIf} $InstallType = ${UpgradeInstall}
+    Abort
+  ${EndIf}
+FunctionEnd
+
+Function LeaveInstallPage
+  Push "$INSTDIR\install.log"
+  Call DumpLog
+FunctionEnd
+
+Function EnterWriteTemplates
+  Push $R0
+  Push $R1
+
+  Call GetSelectedComponents
+  Pop $R0
+
+  IntOp $R0 $R0 & ${ComponentDirector}
+  IntOp $R1 $NewComponents & ${ComponentsFileAndStorage}
+
+  ${If} $R0 <> 0
+  ${OrIf} $R1 = 0
+    Pop $R1
+    Pop $R0
+    Abort
+  ${EndIf}
+
+  IntOp $R0 $NewComponents & ${ComponentFile}
+  ${If} $R0 = 0
+    WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 2" State 0
+    WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 2" Flags DISABLED
+    DeleteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 3" State
+    WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 3" Flags REQ_SAVE|FILE_EXPLORER|WARN_IF_EXIST|DISABLED
+  ${Else}
+    WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 2" State 1
+    DeleteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 2" Flags
+    WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 3" State "C:\$ConfigClientName.conf"
+    WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 5" Flags REQ_SAVE|FILE_EXPLORER|WARN_IF_EXIST
+  ${EndIf}
+
+  IntOp $R0 $NewComponents & ${ComponentStorage}
+  ${If} $R0 = 0
+    WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 4" State 0
+    WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 4" Flags DISABLED
+    DeleteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 5" State
+    WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 5" Flags REQ_SAVE|FILE_EXPLORER|WARN_IF_EXIST|DISABLED
+  ${Else}
+    WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 4" State 1
+    DeleteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 4" Flags
+    WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 5" State "C:\$ConfigStorageName.conf"
+    WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 5" Flags REQ_SAVE|FILE_EXPLORER|WARN_IF_EXIST
+  ${EndIf}
+
+  !InsertMacro MUI_HEADER_TEXT "$(TITLE_WriteTemplates)" "$(SUBTITLE_WriteTemplates)"
+  !InsertMacro MUI_INSTALLOPTIONS_DISPLAY "WriteTemplates.ini"
+
+  !InsertMacro MUI_INSTALLOPTIONS_READ $R0 "WriteTemplates.ini" "Field 2" State
+  ${If} $R0 <> 0
+    File "/oname=$PLUGINSDIR\client.conf.in" "client.conf.in"
+
+    nsExec::ExecToLog '$PLUGINSDIR\sed.exe -f "$PLUGINSDIR\config.sed" -i.bak "$PLUGINSDIR\client.conf.in"'
+    !InsertMacro MUI_INSTALLOPTIONS_READ $R0 "WriteTemplates.ini" "Field 3" State
+    ${If} $R0 != ""
+      CopyFiles "$PLUGINSDIR\client.conf.in" "$R0"
+    ${EndIf}
+  ${EndIf}
+
+  !InsertMacro MUI_INSTALLOPTIONS_READ $R0 "WriteTemplates.ini" "Field 4" State
+  ${If} $R0 <> 0
+    File "/oname=$PLUGINSDIR\storage.conf.in" "storage.conf.in"
+
+    nsExec::ExecToLog '$PLUGINSDIR\sed.exe -f "$PLUGINSDIR\config.sed" -i.bak "$PLUGINSDIR\storage.conf.in"'
+    !InsertMacro MUI_INSTALLOPTIONS_READ $R0 "WriteTemplates.ini" "Field 5" State
+    ${If} $R0 != ""
+      CopyFiles "$PLUGINSDIR\storage.conf.in" "$R0"
+    ${EndIf}
+  ${EndIf}
+
+  Pop $R1
+  Pop $R0
+FunctionEnd
+
+Function SelectPreviousComponents
+  ${If} $InstallType <> ${NewInstall}
+    IntOp $R1 $PreviousComponents & ${ComponentFile}
+    ${If} $R1 <> 0
+      !InsertMacro SelectSection ${SecFileDaemon}
+      !InsertMacro SetSectionFlag ${SecFileDaemon} ${SF_RO}
+    ${Else}
+      !InsertMacro UnselectSection ${SecFileDaemon}
+      !InsertMacro ClearSectionFlag ${SecFileDaemon} ${SF_RO}
+    ${EndIf}
+    IntOp $R1 $PreviousComponents & ${ComponentStorage}
+    ${If} $R1 <> 0
+      !InsertMacro SelectSection ${SecStorageDaemon}
+      !InsertMacro SetSectionFlag ${SecStorageDaemon} ${SF_RO}
+    ${Else}
+      !InsertMacro UnselectSection ${SecStorageDaemon}
+      !InsertMacro ClearSectionFlag ${SecStorageDaemon} ${SF_RO}
+    ${EndIf}
+    IntOp $R1 $PreviousComponents & ${ComponentDirector}
+    ${If} $R1 <> 0
+      !InsertMacro SelectSection ${SecDirectorDaemon}
+      !InsertMacro SetSectionFlag ${SecDirectorDaemon} ${SF_RO}
+    ${Else}
+      !InsertMacro UnselectSection ${SecDirectorDaemon}
+      !InsertMacro ClearSectionFlag ${SecDirectorDaemon} ${SF_RO}
+    ${EndIf}
+    IntOp $R1 $PreviousComponents & ${ComponentTextConsole}
+    ${If} $R1 <> 0
+      !InsertMacro SelectSection ${SecConsole}
+      !InsertMacro SetSectionFlag ${SecConsole} ${SF_RO}
+    ${Else}
+      !InsertMacro UnselectSection ${SecConsole}
+      !InsertMacro ClearSectionFlag ${SecConsole} ${SF_RO}
+    ${EndIf}
+    IntOp $R1 $PreviousComponents & ${ComponentBatConsole}
+    ${If} $R1 <> 0
+      !InsertMacro SelectSection ${SecBatConsole}
+      !InsertMacro SetSectionFlag ${SecBatConsole} ${SF_RO}
+    ${Else}
+      !InsertMacro UnselectSection ${SecBatConsole}
+      !InsertMacro ClearSectionFlag ${SecBatConsole} ${SF_RO}
+    ${EndIf}
+    IntOp $R1 $PreviousComponents & ${ComponentGUIConsole}
+    ${If} $R1 <> 0
+      !InsertMacro SelectSection ${SecWxConsole}
+      !InsertMacro SetSectionFlag ${SecWxConsole} ${SF_RO}
+    ${Else}
+      !InsertMacro UnselectSection ${SecWxConsole}
+      !InsertMacro ClearSectionFlag ${SecWxConsole} ${SF_RO}
+    ${EndIf}
+    IntOp $R1 $PreviousComponents & ${ComponentPDFDocs}
+    ${If} $R1 <> 0
+      !InsertMacro SelectSection ${SecDocPdf}
+      !InsertMacro SetSectionFlag ${SecDocPdf} ${SF_RO}
+    ${Else}
+      !InsertMacro UnselectSection ${SecDocPdf}
+      !InsertMacro ClearSectionFlag ${SecDocPdf} ${SF_RO}
+    ${EndIf}
+    IntOp $R1 $PreviousComponents & ${ComponentHTMLDocs}
+    ${If} $R1 <> 0
+      !InsertMacro SelectSection ${SecDocHtml}
+      !InsertMacro SetSectionFlag ${SecDocHtml} ${SF_RO}
+    ${Else}
+      !InsertMacro UnselectSection ${SecDocHtml}
+      !InsertMacro ClearSectionFlag ${SecDocHtml} ${SF_RO}
+    ${EndIf}
+  ${EndIf}
+FunctionEnd
+
+Function DisableServerSections
+  !InsertMacro UnselectSection ${SecGroupServer}
+  !InsertMacro SetSectionFlag  ${SecGroupServer} ${SF_RO}
+  !InsertMacro UnselectSection ${SecStorageDaemon}
+  !InsertMacro SetSectionFlag  ${SecStorageDaemon} ${SF_RO}
+  !InsertMacro UnselectSection ${SecDirectorDaemon}
+  !InsertMacro SetSectionFlag  ${SecDirectorDaemon} ${SF_RO}
+FunctionEnd
+
+Function UpdateComponentUI
+  Push $R0
+  Push $R1
+
+  Call GetSelectedComponents
+  Pop $R0
+
+  IntOp $R1 $R0 ^ $PreviousComponents
+  IntOp $NewComponents $R0 & $R1
+
+  ${If} $InstallType <> ${NewInstall}
+    IntOp $R1 $NewComponents & ${ComponentFile}
+    ${If} $R1 <> 0
+      !InsertMacro SetSectionFlag ${SecFileDaemon} ${SF_BOLD}
+    ${Else}
+      !InsertMacro ClearSectionFlag ${SecFileDaemon} ${SF_BOLD}
+    ${EndIf}
+    IntOp $R1 $NewComponents & ${ComponentStorage}
+    ${If} $R1 <> 0
+      !InsertMacro SetSectionFlag ${SecStorageDaemon} ${SF_BOLD}
+    ${Else}
+      !InsertMacro ClearSectionFlag ${SecStorageDaemon} ${SF_BOLD}
+    ${EndIf}
+    IntOp $R1 $NewComponents & ${ComponentDirector}
+    ${If} $R1 <> 0
+      !InsertMacro SetSectionFlag ${SecDirectorDaemon} ${SF_BOLD}
+    ${Else}
+      !InsertMacro ClearSectionFlag ${SecDirectorDaemon} ${SF_BOLD}
+    ${EndIf}
+    IntOp $R1 $NewComponents & ${ComponentTextConsole}
+    ${If} $R1 <> 0
+      !InsertMacro SetSectionFlag ${SecConsole} ${SF_BOLD}
+    ${Else}
+      !InsertMacro ClearSectionFlag ${SecConsole} ${SF_BOLD}
+    ${EndIf}
+    IntOp $R1 $NewComponents & ${ComponentBatConsole}
+    ${If} $R1 <> 0
+      !InsertMacro SetSectionFlag ${SecBatConsole} ${SF_BOLD}
+    ${Else}
+      !InsertMacro ClearSectionFlag ${SecBatConsole} ${SF_BOLD}
+    ${EndIf}
+    IntOp $R1 $NewComponents & ${ComponentGUIConsole}
+    ${If} $R1 <> 0
+      !InsertMacro SetSectionFlag ${SecWxConsole} ${SF_BOLD}
+    ${Else}
+      !InsertMacro ClearSectionFlag ${SecWxConsole} ${SF_BOLD}
+    ${EndIf}
+    IntOp $R1 $NewComponents & ${ComponentPDFDocs}
+    ${If} $R1 <> 0
+      !InsertMacro SetSectionFlag ${SecDocPdf} ${SF_BOLD}
+    ${Else}
+      !InsertMacro ClearSectionFlag ${SecDocPdf} ${SF_BOLD}
+    ${EndIf}
+    IntOp $R1 $NewComponents & ${ComponentHTMLDocs}
+    ${If} $R1 <> 0
+      !InsertMacro SetSectionFlag ${SecDocHtml} ${SF_BOLD}
+    ${Else}
+      !InsertMacro ClearSectionFlag ${SecDocHtml} ${SF_BOLD}
+    ${EndIf}
+  ${EndIf}
+
+  GetDlgItem $R0 $HWNDPARENT 1
+
+  IntOp $R1 $NewComponents & ${ComponentsRequiringUserConfig}
+  ${If} $R1 = 0
+    SendMessage $R0 ${WM_SETTEXT} 0 "STR:Install"
+  ${Else}
+    SendMessage $R0 ${WM_SETTEXT} 0 "STR:&Next >"
+  ${EndIf}
+
+  Pop $R1
+  Pop $R0
+FunctionEnd
+
+!include "InstallType.nsh"
+!include "ConfigPage1.nsh"
+!include "ConfigPage2.nsh"
+!include "DumpLog.nsh"