Typo
[gpg4win.git] / src / installer.nsi
index ff89220..4723ad5 100644 (file)
@@ -1,5 +1,5 @@
 # installer.nsi - Installer for GnuPG 4 Windows.    -*- coding: latin-1; -*-
-# Copyright (C) 2005 g10 Code GmbH
+# Copyright (C) 2005, 2007 g10 Code GmbH
 # 
 # This file is part of GPG4Win.
 # 
 !macroend
 !endif
 
+!include "WinMessages.nsh"
+
+# Define for the registry key to change the environment.  The
+# commented one may be used if the setting should affect only the
+# current user.
+!define Regkey_for_Env \
+    'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"'
+# !define Regkey_for_Env 'HKCU "Environment"'
+
+
+# We use Memento to remember past installation choices.
+!include Memento.nsh
+!define MEMENTO_REGISTRY_ROOT HKLM
+!define MEMENTO_REGISTRY_KEY \
+  Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRETTY_PACKAGE_SHORT}
+
 
 # We use the modern UI.
 !include "MUI.nsh"
@@ -39,10 +55,12 @@ Name "${PRETTY_PACKAGE}"
 
 
 # Set the output filename.
+!ifdef GPG4WIN_LIGHT
+OutFile "${PACKAGE}-light-${VERSION}.exe"
+!else
 OutFile "${PACKAGE}-${VERSION}.exe"
+!endif
 
-Icon "${TOP_SRCDIR}/doc/logo/gpg4win-logo-icon.ico"
-UninstallIcon "${TOP_SRCDIR}/doc/logo/gpg4win-logo-icon.ico"
 
 # Set the installation directory.
 !ifndef INSTALL_DIR
@@ -81,7 +99,7 @@ VIAddVersionKey "LegalCopyright" "${COPYRIGHT}"
 VIAddVersionKey "FileDescription" "${DESCRIPTION}"
 VIAddVersionKey "FileVersion" "${PROD_VERSION}"
 
-# Set to the name of another GnupG installation if one has been detected
+# Set to the name of another GnuPG installation if one has been detected
 Var OtherGnuPGDetected
 
 # Interface Settings
@@ -90,22 +108,33 @@ Var OtherGnuPGDetected
 !define MUI_FINISHPAGE_NOAUTOCLOSE
 !define MUI_UNFINISHPAGE_NOAUTOCLOSE
 
-#!define MUI_HEADERIMAGE
-#!define MUI_HEADERIMAGE_BITMAP \
-#               "${TOP_SRCDIR}/doc/logo/gpg4win-logo-150x57.bmp"
+!define MUI_HEADERIMAGE
+!define MUI_HEADERIMAGE_BITMAP \
+               "${TOP_SRCDIR}/doc/logo/gpg4win-nsis-header-install-150x57.bmp"
+!define MUI_HEADERIMAGE_UNBITMAP \
+               "${TOP_SRCDIR}/doc/logo/gpg4win-nsis-header-uninstall-150x57.bmp"
 !define MUI_WELCOMEFINISHPAGE_BITMAP \
-               "${TOP_SRCDIR}/doc/logo/gpg4win-logo-164x314.bmp"
+               "${TOP_SRCDIR}/doc/logo/gpg4win-nsis-wizard-install-164x314.bmp"
+!define MUI_UNWELCOMEFINISHPAGE_BITMAP \
+               "${TOP_SRCDIR}/doc/logo/gpg4win-nsis-wizard-uninstall-164x314.bmp"
+!define MUI_ICON "${TOP_SRCDIR}/doc/logo/gpg4win-nsis-install.ico"
+!define MUI_UNICON "${TOP_SRCDIR}/doc/logo/gpg4win-nsis-uninstall.ico"
 
 # Remember the installer language
 
-#!define MUI_LANGDLL_REGISTRY_ROOT "HKCU" 
-#!define MUI_LANGDLL_REGISTRY_KEY "Software\GNU\${PRETTY_PACKAGE_SHORT}" 
-#!define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language"
+!define MUI_LANGDLL_REGISTRY_ROOT "HKLM"
+!define MUI_LANGDLL_REGISTRY_KEY "Software\GNU\${PRETTY_PACKAGE_SHORT}" 
+!define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language"
+
+# No Umlaute, please!
+!define MUI_LANGDLL_INFO "Please choose a language for the setup.$\r$\n\
+Bitte die Sprache des Installations-Vorgangs angeben."
 
 # The list of wizard pages.
 
-!define MUI_WELCOMEPAGE_TITLE "$(T_WelcomeTitle)"
-!define MUI_WELCOMEPAGE_TEXT  "$(T_About)"
+!define MUI_WELCOMEPAGE_TITLE "${WELCOME_TITLE_STR}"
+!define MUI_WELCOMEPAGE_TEXT "${ABOUT_STR}"
+
 !insertmacro MUI_PAGE_WELCOME
 
 !define MUI_LICENSEPAGE_BUTTON "$(^NextBtn)"
@@ -127,7 +156,7 @@ Var STARTMENU_FOLDER
 
 !define MUI_PAGE_CUSTOMFUNCTION_PRE CheckIfStartMenuWanted
 !define MUI_STARTMENUPAGE_NODISABLE
-!define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU"
+!define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKLM"
 !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\GNU\${PRETTY_PACKAGE_SHORT}"
 !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
 
@@ -139,7 +168,7 @@ Var STARTMENU_FOLDER
 !insertmacro MUI_PAGE_INSTFILES
 
 !define MUI_PAGE_CUSTOMFUNCTION_PRE ShowFinalWarnings
-!define MUI_FINISHPAGE_SHOWREADME "README.$(T_LangCode).txt"
+!define MUI_FINISHPAGE_SHOWREADME "share\gpg4win\README.$(T_LangCode).txt"
 !define MUI_FINISHPAGE_SHOWREADME_TEXT "$(T_ShowReadme)"
 #!define MUI_FINISHPAGE_RUN
 #!define MUI_FINISHPAGE_RUN_FUNCTION RunOnFinish
@@ -152,9 +181,10 @@ Var STARTMENU_FOLDER
 
 # Uninstaller pages.
 
+!insertmacro MUI_UNPAGE_WELCOME
 !insertmacro MUI_UNPAGE_CONFIRM
 !insertmacro MUI_UNPAGE_INSTFILES
-
+!insertmacro MUI_UNPAGE_FINISH
 
 #Page license
 #Page components
@@ -167,10 +197,20 @@ Var STARTMENU_FOLDER
 # Language support.  This has to be done after defining the pages, but
 # before defining the translation strings.  Confusing.
 
+# Enable this to not filter languages for the current code page.  Note
+# that languages which are then not filtered out may not be displayed
+# correctly in the Windows version the user is using.  Not recommended,
+# but can be useful for testing.
+!ifdef DEBUG
+!define MUI_LANGDLL_ALLLANGUAGES
+!endif
+
 !insertmacro MUI_LANGUAGE "English"
-!insertmacro MUI_LANGUAGE "German"
+!define PO_HEADER
+!include "../po/catalogs.nsi"
+!undef PO_HEADER
 
-#!insertmacro MUI_RESERVEFILE_LANGDLL
+!insertmacro MUI_RESERVEFILE_LANGDLL
 !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
 ReserveFile "${BUILD_DIR}\g4wihelp.dll"
 !ifdef SOURCES
@@ -178,64 +218,47 @@ ReserveFile "${TOP_SRCDIR}\doc\logo\gpg4win-logo-400px.bmp"
 ReserveFile "${TOP_SRCDIR}\src\gpg4win-splash.wav"
 !endif
 ReserveFile "${TOP_SRCDIR}\COPYING"
-ReserveFile "${TOP_SRCDIR}\src\installer-options.ini"
+ReserveFile "installer-options.ini"
 ReserveFile "${TOP_SRCDIR}\doc\logo\gpg4win-logo-164x314.bmp"
 
 # Language support
 
 LangString T_LangCode ${LANG_ENGLISH} "en"
-LangString T_LangCode ${LANG_GERMAN}  "de"
-
-
-# The WelcomeTitle is displayed on the first page.
-LangString T_WelcomeTitle ${LANG_ENGLISH} "${WELCOME_TITLE_ENGLISH}"
-LangString T_WelcomeTitle ${LANG_GERMAN} "${WELCOME_TITLE_GERMAN}"
-
-# The About string as displayed on the first page.
-LangString T_About ${LANG_ENGLISH} "${ABOUT_ENGLISH}"
-LangString T_About ${LANG_GERMAN} "${ABOUT_GERMAN}"
 
 # Startup page
 LangString T_GPLHeader ${LANG_ENGLISH} \
   "This software is licensed under the terms of the GNU General Public \
-   License (GPL) which guarantees your freedom to share and change Free \
-   Software."
-LangString T_GPLHeader ${LANG_GERMAN}} \
-  "Diese Software ist unter der GNU General Public License \
-   (GPL) lizensiert; dies gibt Ihnen die Freiheit, sie \
-   zu ändern und weiterzugeben."
+   License (GPL)."
 
 LangString T_GPLShort ${LANG_ENGLISH} \
   "In short: You are allowed to run this software for any purpose. \
    You may distribute it as long as you give the recipients the same \
    rights you have received."
-LangString T_GPLShort ${LANG_GERMAN} \
-  "In aller Kürze: Sie haben das Recht, die Software zu jedem Zweck \
-   einzusetzen.  Sie können die Software weitergeben, sofern Sie dem \
-   Empfänger dieselben Rechte einräumen, die auch Sie erhalten haben."
 
 LangString T_RunKeyManager ${LANG_ENGLISH} \
    "Run the key manager"
-LangString T_RunKeyManager ${LANG_GERMAN} \
-   "Die Schlüsselverwaltung aufrufen"
 
 LangString T_MoreInfo ${LANG_ENGLISH} \
    "Click here for the project's homepage"
-LangString T_MoreInfo ${LANG_GERMAN} \
-   "Hier klicken um zur Homepage des Projekts zu gelangen"
 LangString T_MoreInfoURL ${LANG_ENGLISH} "http://www.gpg4win.org"
-LangString T_MoreInfoURL ${LANG_GERMAN}  "http://www.gpg4win.de"
 
 LangString T_ShowReadme ${LANG_ENGLISH} \
    "Show the README file"
-LangString T_ShowReadme ${LANG_GERMAN} \
-   "Die README Datei anzeigen"
 
 LangString T_NoKeyManager ${LANG_ENGLISH} \
    "No key manager has been installed, thus we can't run one now."
-LangString T_NoKeyManager ${LANG_GERMAN} \
-   "Es wurde keine Schlüsselverwaltung installiert. \
-    Deswegen kann sie jetzt auch nicht ausgeführt werden."
+
+# Used as subdirectory name in Start Menu.
+
+LangString DESC_Menu_manuals ${LANG_ENGLISH} \
+   "Documentation"
+
+LangString DESC_Menu_uninstall ${LANG_ENGLISH} \
+   "Uninstall"
+
+# Used as subdirectory name on Desktop.
+LangString DESC_Desktop_manuals ${LANG_ENGLISH} \
+   "Gpg4win Documentation"
 
 
 # Functions
@@ -249,7 +272,8 @@ LangString T_NoKeyManager ${LANG_GERMAN} \
 #
 Function CustomPageOptions
   !insertmacro MUI_HEADER_TEXT "$(T_InstallOptions)" "$(T_InstallOptLinks)"
-  # Note, that the default selection is done in the ini file
+
+  # Note that the default selection is done in the ini file.
   !insertmacro MUI_INSTALLOPTIONS_WRITE "installer-options.ini" \
        "Field 1" "Text"  "$(T_InstOptLabelA)"
   !insertmacro MUI_INSTALLOPTIONS_WRITE "installer-options.ini" \
@@ -258,11 +282,17 @@ Function CustomPageOptions
        "Field 3" "Text"  "$(T_InstOptFieldB)"
   !insertmacro MUI_INSTALLOPTIONS_WRITE "installer-options.ini" \
        "Field 4" "Text"  "$(T_InstOptFieldC)"
-
+  !insertmacro MUI_INSTALLOPTIONS_WRITE "installer-options.ini" \
+       "Field 5" "Text"  "$(T_InstOptLabelB)"
 
   !insertmacro MUI_INSTALLOPTIONS_DISPLAY "installer-options.ini"
 FunctionEnd
 
+# Display a warning if this is a Beta version.
+#Function PrintBetaWarning
+#   MessageBox MB_OK "$(T_BetaWarning)"
+#FunctionEnd
+
 
 # Display a warning if GnuPP has been detected and allow the user to abort
 # the installation.
@@ -334,7 +364,7 @@ FunctionEnd
 Function CheckExistingVersion
   ClearErrors
   FileOpen $0 "$INSTDIR\VERSION" r
-  IfErrors leave
+  IfErrors nexttest
   FileRead $0 $R0
   FileRead $0 $R1
   FileClose $0
@@ -343,8 +373,23 @@ Function CheckExistingVersion
   Call TrimNewLines
   Pop $R1
 
+  # Extract major version.
+  StrCpy $0 $R1 2
+  StrCmp $0 "1." 0 secondtest
+    MessageBox MB_YESNO "$(T_FoundExistingOldVersion)" IDYES leave
+    Abort
+
+ secondtest:
   MessageBox MB_YESNO "$(T_FoundExistingVersion)" IDYES leave
+  Abort
+
+ nexttest:
+  ClearErrors
+  ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\GPG4Win" "DisplayVersion"
+  IfErrors leave 0
+     MessageBox MB_YESNO "$(T_FoundExistingVersionB)" IDYES leave
      Abort
+     
  leave:
 FunctionEnd
 
@@ -354,8 +399,11 @@ FunctionEnd
 
 # Check whether the current user is in the Administrator group or an
 # OS version without the need for an Administrator is in use.  Print a
-# warning if this is not the case.
+# diagnostic if this is not the case and abort installation.
 Function PrintNonAdminWarning
+
+  #Call PrintBetaWarning
+
   ClearErrors
   UserInfo::GetName
   IfErrors leave
@@ -364,6 +412,7 @@ Function PrintNonAdminWarning
   Pop $1
   StrCmp $1 "Admin" leave +1
   MessageBox MB_OK "$(T_AdminNeeded)"
+  Quit
 
  leave:
 FunctionEnd
@@ -387,11 +436,16 @@ Function PrintCloseOtherApps
     IfFileExists $INSTDIR\gpa.exe   print_warning
     IfFileExists $INSTDIR\gpgol.dll print_warning
     IfFileExists $INSTDIR\gpgee.dll print_warning
+    IfFileExists $INSTDIR\dirmngr.exe print_warning
     Return
    print_warning:
     MessageBox MB_OK|MB_ICONEXCLAMATION "$(T_CloseOtherApps)"
-    IfFileExists $INSTDIR\winpt.exe 0 +2
+    IfFileExists $INSTDIR\winpt.exe 0 +3
+      MessageBox MB_OK "$(T_ShuttingDownWinPT)"
       ExecWait '"$INSTDIR\winpt.exe" --stop'
+    IfFileExists $INSTDIR\dirmngr.exe 0 +3
+      MessageBox MB_OK "$(T_ShuttingDownDirMngr)"
+      g4wihelp::service_stop "DirMngr"
    leave:
 FunctionEnd
 
@@ -408,31 +462,24 @@ FunctionEnd
 
 # Installation options title
 LangString T_InstallOptions ${LANG_ENGLISH} "Install Options"
-LangString T_InstallOptions ${LANG_GERMAN}  "Installationsoptionen"
 
 # Installation options subtitle 1
 LangString T_InstallOptLinks ${LANG_ENGLISH} "Start links"
-LangString T_InstallOptLinks ${LANG_GERMAN}  "Startlinks"
 
 LangString T_InstOptLabelA  ${LANG_ENGLISH} \
      "Please select where Gpg4win shall install links:"
-LangString T_InstOptLabelA  ${LANG_GERMAN} \
-     "Bitte wählen Sie, welche Verknüpfungen angelegt werden sollen:"
+
+LangString T_InstOptLabelB  ${LANG_ENGLISH} \
+     "(Only programs will be linked into the quick launch bar.)"
 
 LangString T_InstOptFieldA  ${LANG_ENGLISH} \
      "Start Menu"
-LangString T_InstOptFieldA  ${LANG_GERMAN} \
-     "Startmenü"
 
 LangString T_InstOptFieldB  ${LANG_ENGLISH} \
      "Desktop"
-LangString T_InstOptFieldB  ${LANG_GERMAN} \
-     "Arbeitsfläche"
 
 LangString T_InstOptFieldC  ${LANG_ENGLISH} \
      "Quick Launch Bar"
-LangString T_InstOptFieldC  ${LANG_GERMAN} \
-     "Schnellstartleiste"
 
 #------------------------------------------------
 # String pertaining to the existing version check
@@ -440,9 +487,17 @@ LangString T_InstOptFieldC  ${LANG_GERMAN} \
 LangString T_FoundExistingVersion ${LANG_ENGLISH} \
      "Version $R1 has already been installed.  $\r$\n\
       Do you want to overwrite it with version ${VERSION}?"
-LangString T_FoundExistingVersion ${LANG_GERMAN} \
-     "Version $R1 ist hier bereits installiert.  $\r$\n\
-      Möchte Sie diese mit Version ${VERSION} überschreiben?"
+LangString T_FoundExistingOldVersion ${LANG_ENGLISH} \
+     "An old version $R1 has already been installed.  It is \
+      strongly recommended to deinstall previous versions on \
+      major upgrades. $\r$\n\
+      Do you want to continue installing Gpg4win ${VERSION} anyway?"
+LangString T_FoundExistingVersionB ${LANG_ENGLISH} \
+     "A version of Gpg4Win has already been installed on the system. \
+      There will be no problem installing and thus overwriting this \
+      Version. $\r$\n\
+       $\r$\n\
+      Do you want to continue installing Gpg4win?"
 
 
 #---------------------------------------------
@@ -451,11 +506,6 @@ LangString T_FoundExistingVersion ${LANG_GERMAN} \
 LangString T_FoundOldSeeManual ${LANG_ENGLISH} \
      "Please see the Gpg4win user manual to learn how to migrate existing \
       keys from other GnuPG based installations to Gpg4win."
-LangString T_FoundOldSeeManual ${LANG_GERMAN} \
-     "Bitte sehen Sie im Gpg4win für Einsteiger Handbuch nach, wie Sie Ihre \
-      Schlüssel aus anderen - GnuPG basierten - Installationen in Gpg4win \
-      überführen.  Es wird dringend geraten Gpg4Win nicht zusammen mit \
-      diesen anderen Installation zu betreiben."
 
 #---------
 LangString T_FoundOldGnuPP ${LANG_ENGLISH} \
@@ -465,20 +515,6 @@ LangString T_FoundOldGnuPP ${LANG_ENGLISH} \
           $\r$\n\
       Do you want to continue installing Gpg4win and take care of the old \
       installation later?"
-LangString T_FoundOldGnuPP ${LANG_GERMAN} \
-     "Eine alte Installation von GnuPP (GNU Privacy Project) wurde gefunden. \
-      Diese Software wird nicht mehr gepflegt und sollte deshalb vom \
-      System entfernt werden.  $\r$\n\
-        $\r$\n\
-      Sie können die Installation von Gpg4win jetzt weiterdurchführen und \
-      danach entscheiden, ob Sie das alte GnuPP dann entfernen.  Sie finden \
-      hierzu Hinweise im Gpg4Win Handbuch für Einsteiger.  Falls Sie die alte \
-      Installation schon jetzt entfernen möchten, so exportieren Sie dort \
-      alle vorhandenen Schlüssel in eine Datei um sie so später in Gpg4Win \
-      wieder importieren zu können. $\r$\n\
-        $\r$\n\
-      Möchten Sie die Installation von Gpg4win weiter durchführen und sich \
-      dann später um die Entfernung von GnuPP kümmern?"
 
 #---------
 LangString T_FoundOldGnuPT ${LANG_ENGLISH} \
@@ -486,22 +522,6 @@ LangString T_FoundOldGnuPT ${LANG_ENGLISH} \
       problems when used along with Gpg4win. $\r$\n\
           $\r$\n\
       Do you want to continue installing Gpg4win?"
-LangString T_FoundOldGnuPT ${LANG_GERMAN} \
-     "Eine Installation von GnuPT wurde gefunden.  Dies kann zu Problemen \
-      führen, falls GnuPT zusammem mit Gpg4win benutzt wird.  Falls Sie GnuPT \
-      zwischenzeitlich bereits entfernt haben, so ignorieren Sie diese \
-      Warnung bitte.  Die Deinstallation von GnuPT erfolgt nicht immer \
-      spurlos und Gpg4win kann deshalb nicht sicher erkennen, ob es \
-      vollständig entfernt wurde.  $\r$\n\
-         $\r$\n\
-      Sie können die Installation von Gpg4win jetzt weiterdurchführen und \
-      danach entscheiden, ob Sie das alte GnuPT dann entfernen.  Sie finden \
-      hierzu Hinweise im Gpg4Win Handbuch für Einsteiger.  Falls Sie die alte \
-      Installation schon jetzt entfernen möchten, so exportieren Sie dort \
-      alle vorhandenen Schlüssel in eine Datei um sie so später in Gpg4Win \
-      wieder importieren zu können.  $\r$\n\
-          $\r$\n\
-      Möchten Sie die Installation von Gpg4win fortführen?"
 
 #---------
 LangString T_FoundOldWinPTSF ${LANG_ENGLISH} \
@@ -511,24 +531,6 @@ LangString T_FoundOldWinPTSF ${LANG_ENGLISH} \
           $\r$\n\
       Do you want to continue installing Gpg4win and take care of the old \
       installation later?"
-LangString T_FoundOldWinPTSF ${LANG_GERMAN} \
-     "Eine alte Installation der Windows Privacy Tools von Sourceforge \
-      wurde gefunden.  Diese Software wird nicht mehr gepflegt und verträgt \
-      sich vermutlich nicht mit Gpg4win.  Sie sollte deshalb vom System \
-      entfernt werden.  $\r$\n\
-        $\r$\n\
-      Sie können versuchen, die Installation von Gpg4win jetzt \
-      weiterdurchführen und danach entscheiden, ob Sie die alte Installation \
-      entfernen.  Sie finden hierzu Hinweise im Gpg4Win Handbuch für \
-      Einsteiger.  $\r$\n\
-        $\r$\n\
-      Wir empfehlen alerdings, diese alte Installation vorher zu entfernen. \
-      Brechen Sie hierzu die Installation von Gpg4win ab und exportieren Sie \
-      mittles dieser alten Version alle vorhandenen Schlüssel in eine Datei \
-      um sie so später in Gpg4Win wieder importieren zu können. $\r$\n\
-        $\r$\n\
-      Möchten Sie die Installation von Gpg4win trotzdem jetzt weiter \
-      durchführen?"
 
 
 #--------
@@ -537,34 +539,31 @@ LangString T_FoundOldGnuPack ${LANG_ENGLISH} \
       uninstall it before you can continue with Gpg4win installation. $\r$\n\
         $\r$\n\
       The installation will be aborted now!"
-LangString T_FoundOldGnuPack ${LANG_GERMAN} \
-     "Eine Installation von GnuPG-Pack wurde gefunden.  Sie müssen diese \
-      zuerst deinstallieren bevor Sie mit der Installation von Gpg4win \
-      fortfahren können. $\r$\n\
-        $\r$\n\
-      Die Installation von Gpg4win wird nun abgebrochen!"
 
 
 
+# From Function PrintBetaWarning
+LangString T_BetaWarning ${LANG_ENGLISH} \
+   "Note: This is a BETA version of Gpg4win. $\r$\n\
+     $\r$\n\
+    Beta versions are only intended for testing and \
+    shall not be used in a production environment."
+
 # From Function PrintNonAdminWarning
 LangString T_AdminNeeded ${LANG_ENGLISH} \
    "Warning: Administrator permissions required for a successful installation"
-LangString T_AdminNeeded ${LANG_GERMAN} \
-   "Achtung: Für eine erfolgreiche Installation werden \
-    Administratorrechte benötigt."
 
 # From Function PrintCloseOtherApps
 LangString T_CloseOtherApps ${LANG_ENGLISH} \
    "Please make sure that other applications are not running. \
     In particular you should close Outlook and all Explorer \
-    windows.  Gpg4Win will try to install anyway but a reboot \
+    windows.  Gpg4win will try to install anyway but a reboot \
     will be required then."
-LangString T_CloseOtherApps ${LANG_GERMAN} \
-   "Bitte stellen Sie sicher, daß alle anderen Anwendugen geschlossen \
-    sind.  Insbesondere sollten Sie Outlook und alle Explorer Fenster \
-    schliessen bevor Sie die Installation fortsetzen.  Gpg4Win wird auf \
-    jeden Fall versuchen, eine Installation durchzuführen; es ist dann aber \
-    u.U. notwendig, das System neu zu starten."
+LangString T_ShuttingDownWinPT ${LANG_ENGLISH} \
+   "Trying to shutdown a possible running instance of WinPT."
+LangString T_ShuttingDownDirMngr ${LANG_ENGLISH} \
+   "Trying to shutdown a possible running instance of DirMngr."
+
 
 # FIXME: The GetAfterChar function comes from the NSIS wiki.
 Function un.GetAfterChar
@@ -614,7 +613,8 @@ FunctionEnd
 #   Pop $R0
 #  ($R0 at this point is "ass string")
 #
-Function StrStr
+!macro StrStr un
+Function ${un}StrStr
    Exch $R1 # st=haystack,old$R1, $R1=needle
    Exch     # st=old$R1,haystack
    Exch $R2 # st=old$R1,old$R2, $R2=haystack
@@ -642,6 +642,10 @@ Function StrStr
    Pop $R2
    Exch $R1
 FunctionEnd
+!macroend
+!insertmacro StrStr ""
+!insertmacro StrStr "un."
+
 
 # TrimNewlines  - taken from the NSIS reference
 # input, top of stack  (e.g. whatever$\r$\n)
@@ -668,3 +672,27 @@ Function TrimNewlines
    Exch $R0
 FunctionEnd
 
+
+# AddToPath - Adds the given dir to the search path.
+#        Input - head of the stack
+Function AddToPath
+  Exch $0
+  g4wihelp::path_add "$0"
+  StrCmp $R5 "0" add_to_path_done
+  SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
+  add_to_path_done:
+  Pop $0
+FunctionEnd
+# RemoveFromPath - Remove a given dir from the path
+#     Input: head of the stack
+Function un.RemoveFromPath
+  Exch $0
+  g4wihelp::path_remove "$0"
+  StrCmp $R5 "0" remove_from_path_done
+  SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
+  remove_from_path_done:
+  Pop $0
+FunctionEnd