; Lyx for Windows, NSIS v2 series installer script ; File LyX-Installer-Update.nsi ; This file is part of LyX, the document processor. ; http://www.lyx.org/ ; Licence details can be found in the file COPYING or copy at ; http://www.lyx.org/about/license.php3 ; Author Uwe Stöhr ; Full author contact details are available in file CREDITS or copy at ; http://www.lyx.org/about/credits.php ; This script requires NSIS 2.25 and newer ; http://nsis.sourceforge.net/ ;-------------------------------- ; Do a Cyclic Redundancy Check to make sure the installer ; was not corrupted by the download. CRCCheck force ; Make the installer as small as possible. SetCompressor lzma ;-------------------------------- ; You should need to change only these macros... !define PRODUCT_DIR "D:\LyXPackage1.5" !define PRODUCT_NAME "LyX" !define PRODUCT_VERSION "1.5svn-xx-04-2007" !define PRODUCT_VERSION_SHORT "150svn" !define PRODUCT_SUBFOLDER "lyx15" !define PRODUCT_LICENSE_FILE "${PRODUCT_DIR}\License.txt" !define PRODUCT_SOURCEDIR "${PRODUCT_DIR}\LyX" !define PRODUCT_EXE "$INSTDIR\bin\lyx.exe" !define PRODUCT_BAT "$INSTDIR\bin\lyx.bat" !define PRODUCT_EXT ".lyx" !define PRODUCT_MIME_TYPE "application/lyx" !define PRODUCT_UNINSTALL_EXE "$INSTDIR\LyXWinUninstall${PRODUCT_VERSION}.exe" !define PRODUCT_HELP_LINK "http://www.lyx.org/internet/mailing.php" !define PRODUCT_ABOUT_URL "http://www.lyx.org/about/" !define PRODUCT_INFO_URL "http://www.lyx.org/" BrandingText "LyXWinInstaller v3.13 - Update" !define INSTALLER_VERSION "Small" !define INSTALLER_EXE "LyXWin150svnUpdate-3-13.exe" !define INSTALLER2_EXE "LyXWin150svnSmall-3-13.exe" ; to check later if this installer version is running at the same time !define INSTALLER3_EXE "LyXWin150svnComplete-3-13.exe" ; to check later if this installer version is running at the same time !define VERSION_BITMAP "${PRODUCT_DIR}\icons\lyx_logo_vert${PRODUCT_VERSION_SHORT}.bmp" !define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\lyx.exe" !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\LyX${PRODUCT_VERSION_SHORT}" !define PRODUCT_UNINST_KEY_OLD "Software\Microsoft\Windows\CurrentVersion\Uninstall\LyX150svn" !define PRODUCT_VERSION_OLD "LyX 1.5svn-15-04-2007" !define PRODUCT_UNINSTALL_EXE_OLD "$INSTDIR\LyXWinUninstall.exe" ;-------------------------------- ; Make some of the information above available to NSIS. Name "${PRODUCT_NAME}" OutFile "${INSTALLER_EXE}" InstallDir "$PROGRAMFILES\${PRODUCT_NAME} ${PRODUCT_VERSION}" ;-------------------------------- ; Variables Var LatexPath Var PythonPath Var ImageMagickPath Var PathPrefix Var Answer Var UserName Var CreateDesktopIcon Var StartmenuFolder Var ProductRootKey Var AppPre Var AppSuff Var AppPath Var String Var Search Var Pointer Var UserList Var INSTDIR_NEW Var FileName Var OldString Var NewString ;-------------------------------- ; load some NSIS libraries !include "MUI.nsh" !include "LogicLib.nsh" !include "FileFunc.nsh" !include "StrFunc.nsh" !include "TextFunc.nsh" !insertmacro LineFind !include "WordFunc.nsh" !insertmacro WordReplace ; Set of various macros and functions !include "LyXUtils.nsh" ; Use the Abiword macros to help set up associations with the file extension in the Registry. ; Grabbed from ; http://abiword.pchasm.org/source/cvs/abiword-cvs/abi/src/pkg/win/setup/NSISv2/abi_util_fileassoc.nsh !include "abi_util_fileassoc.nsh" ; list with modified files !include "Updated.nsh" ; list with deleted files !include "Deleted.nsh" ;-------------------------------- ; Remember the installer language !define MUI_LANGDLL_REGISTRY_ROOT "HKCU" !define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}" !define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language" !define MUI_ABORTWARNING !define MUI_HEADERIMAGE !define MUI_HEADERIMAGE_BITMAP "${PRODUCT_DIR}\icons\lyx_logo_hi.bmp" !define MUI_ICON "${PRODUCT_DIR}\icons\lyx.ico" !define MUI_UNICON "${PRODUCT_DIR}\icons\lyx.ico" !define MUI_WELCOMEFINISHPAGE_BITMAP "${VERSION_BITMAP}" ; Welcome page !define MUI_WELCOMEPAGE_TEXT "$(WelcomePageText)" !insertmacro MUI_PAGE_WELCOME ; Show the license. !insertmacro MUI_PAGE_LICENSE "${PRODUCT_LICENSE_FILE}" ; Define which components to install. !insertmacro MUI_PAGE_COMPONENTS ; Specify where to install program shortcuts. !define MUI_STARTMENUPAGE_REGISTRY_ROOT "SHCTX" !define MUI_STARTMENUPAGE_REGISTRY_KEY "${PRODUCT_UNINST_KEY}" !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder" !define MUI_STARTMENUPAGE_DEFAULTFOLDER "LyX ${PRODUCT_VERSION}" !insertmacro MUI_PAGE_STARTMENU ${PRODUCT_NAME} $StartmenuFolder ; Watch the components being installed. !insertmacro MUI_PAGE_INSTFILES ; Finish page !define MUI_FINISHPAGE_RUN !define MUI_FINISHPAGE_TEXT "$(FinishPageMessage)" !define MUI_FINISHPAGE_RUN_TEXT "$(FinishPageRun)" !define MUI_FINISHPAGE_RUN_FUNCTION "LaunchProduct" !insertmacro MUI_PAGE_FINISH ; The uninstaller. !insertmacro MUI_UNPAGE_COMPONENTS !insertmacro MUI_UNPAGE_INSTFILES ;-------------------------------- ; Languages !insertmacro MUI_LANGUAGE "English" ; first language is the default language !insertmacro MUI_LANGUAGE "Danish" !insertmacro MUI_LANGUAGE "Dutch" !insertmacro MUI_LANGUAGE "French" !insertmacro MUI_LANGUAGE "German" !insertmacro MUI_LANGUAGE "Galician" !insertmacro MUI_LANGUAGE "Hungarian" !insertmacro MUI_LANGUAGE "Italian" !insertmacro MUI_LANGUAGE "Norwegian" !insertmacro MUI_LANGUAGE "Polish" !insertmacro MUI_LANGUAGE "Portuguese" !insertmacro MUI_LANGUAGE "Slovak" !insertmacro MUI_LANGUAGE "Spanish" !insertmacro MUI_LANGUAGE "Swedish" !insertmacro MUI_LANGUAGE "Turkish" !include "lyx_languages\english.nsh" !include "lyx_languages\danish.nsh" !include "lyx_languages\dutch.nsh" !include "lyx_languages\french.nsh" !include "lyx_languages\german.nsh" !include "lyx_languages\galician.nsh" !include "lyx_languages\hungarian.nsh" !include "lyx_languages\italian.nsh" !include "lyx_languages\norwegian.nsh" !include "lyx_languages\polish.nsh" !include "lyx_languages\portuguese.nsh" !include "lyx_languages\slovak.nsh" !include "lyx_languages\spanish.nsh" !include "lyx_languages\swedish.nsh" !include "lyx_languages\turkish.nsh" LicenseData "$(LyXLicenseData)" ;-------------------------------- ; Reserve Files ; These files are inserted before other files in the data block !insertmacro MUI_RESERVEFILE_LANGDLL !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS ;-------------------------------- ; Installer sections Section "!${PRODUCT_NAME}" SecCore SectionIn RO SectionEnd Section "$(SecDesktopTitle)" SecDesktop StrCpy $CreateDesktopIcon "true" SectionEnd ; Section descriptions !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${SecCore} "$(SecCoreDescription)" !insertmacro MUI_DESCRIPTION_TEXT ${SecDesktop} "$(SecDesktopDescription)" !insertmacro MUI_FUNCTION_DESCRIPTION_END ; the installation section !include "InstallActions-update.nsh" ;-------------------------------- ; This hook function is called internally by NSIS on installer startup Function .onInit ; Check that LyX is not currently running FindProcDLL::FindProc "lyx.exe" ${if} $R0 == "1" MessageBox MB_OK|MB_ICONSTOP "$(UnInstallRunning)" Abort ${endif} ; set the installer language to the Windows locale language System::Call "kernel32::GetUserDefaultLangID()i.a" ; Check that the installer is not currently running System::Call 'kernel32::CreateMutexA(i 0, i 0, t "${INSTALLER_EXE}.Instance") i .r1 ?e' Pop $R0 ${if} $R0 != "0" MessageBox MB_OK|MB_ICONSTOP "$(InstallRunning)" Abort ${endif} FindProcDLL::FindProc "${INSTALLER2_EXE}" ${if} $R0 == "1" MessageBox MB_OK|MB_ICONSTOP "$(InstallRunning)" Abort ${endif} FindProcDLL::FindProc "${INSTALLER3_EXE}" ${if} $R0 == "1" MessageBox MB_OK|MB_ICONSTOP "$(InstallRunning)" Abort ${endif} ; check where LyX is installed ReadRegStr $0 HKLM "${PRODUCT_UNINST_KEY_OLD}" "DisplayIcon" ${if} $0 != "" SetShellVarContext all StrCpy $ProductRootKey "HKLM" ${endif} ${if} $0 == "" ReadRegStr $0 HKCU "${PRODUCT_UNINST_KEY_OLD}" "DisplayIcon" ${if} $0 != "" SetShellVarContext current StrCpy $ProductRootKey "HKCU" ${endif} ${if} $0 == "" MessageBox MB_OK|MB_ICONSTOP "$(UpdateNotAllowed)" Abort ${endif} ${endif} ; end if $0 == 0 ${if} $0 != "" ; if it is found StrCpy $INSTDIR $0 StrCpy $INSTDIR $INSTDIR -12 ; delete the string "\bin\lyx.exe" or "\bin\lyx.bat" ${endif} ; abort if the user doesn't have administrator privileges but LyX was installed as admin StrCpy $Answer "" StrCpy $UserName "" !insertmacro IsUserAdmin $Answer $UserName ; macro from LyXUtils.nsh ${if} $Answer != "yes" ${andif} $ProductRootKey == "HKLM" MessageBox MB_OK|MB_ICONSTOP "$(NotAdmin)" Abort ${endif} ; This can be reset to "true" in section SecDesktop. StrCpy $CreateDesktopIcon "false" ClearErrors FunctionEnd ;-------------------------------- Function LaunchProduct Exec ${PRODUCT_BAT} FunctionEnd ;-------------------------------- ; The Uninstaller Function un.onInit ; Check that LyX is not currently running FindProcDLL::FindProc "lyx.exe" ${if} $R0 == "1" MessageBox MB_OK|MB_ICONSTOP "$(UnInstallRunning)" Abort ${endif} ; set registry root key StrCpy $Answer "" !insertmacro IsUserAdmin $Answer $UserName ; macro from LyXUtils.nsh ${if} $Answer == "yes" SetShellVarContext all ${else} SetShellVarContext current ${endif} ; Ascertain whether the user has sufficient privileges to uninstall. ; abort when LyX was installed with admin permissions but the user doesn't have administrator privileges ReadRegStr $0 HKLM "${PRODUCT_UNINST_KEY}" "RootKey" ${if} $0 != "" ${andif} $Answer != "yes" MessageBox MB_OK|MB_ICONSTOP "$(UnNotAdminLabel)" Abort ${endif} ; abort when LyX couldn't be found in the registry ${if} $0 == "" ; check in HKCU ReadRegStr $0 HKCU "${PRODUCT_UNINST_KEY}" "RootKey" ${if} $0 == "" MessageBox MB_OK|MB_ICONEXCLAMATION "$(UnNotInRegistryLabel)" ${endif} ${endif} FunctionEnd Function un.onUninstSuccess HideWindow ; hides the uninstaller Window when it is ready FunctionEnd Section "un.LyX" un.SecUnProgramFiles SectionIn RO ; delete LaTeX class files that were installed together with LyX FileOpen $R5 "$INSTDIR\Resources\uninstallPaths.dat" r FileRead $R5 $LatexPath FileClose $R5 StrCpy $String $LatexPath StrCpy $Search "miktex\bin" StrLen $3 $String Call un.StrPoint ; search the LaTeXPath for the phrase "miktex\bin" (function from LyXUtils.nsh) ${if} $Pointer != "-1" ; if something was found IntOp $Pointer $Pointer - 1 ; jump before the first "\" of "\miktex\bin" StrCpy $String $String "$Pointer" ; $String is now the part before "\miktex\bin" Delete "$String\tex\latex\cv.cls" RMDir /r "$String\tex\latex\lyx" RMDir /r "$String\tex\latex\revtex" RMDir /r "$String\tex\latex\hollywood" RMDir /r "$String\tex\latex\broadway" ExecWait "$LatexPath\initexmf --update-fndb" ${endif} ; delete start menu folder ReadRegStr $0 SHCTX "${PRODUCT_UNINST_KEY}" "StartMenu" RMDir /r "$0" ; delete desktop icon Delete "$DESKTOP\LyX ${PRODUCT_VERSION}.lnk" ; delete registry entries DeleteRegKey HKCU "${PRODUCT_UNINST_KEY}" DeleteRegKey SHCTX "${PRODUCT_UNINST_KEY}" DeleteRegKey SHCTX "${PRODUCT_DIR_REGKEY}" ; run the installer of the old LyX version to clean up the third party products WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "RootKey" "Start" ; dummy entry to let the uninstaller start Exec "${PRODUCT_UNINSTALL_EXE_OLD}" SectionEnd ; eof