; Uninstaller ; this function is called at first after starting 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} ; Macro to investigate name of LyX's preferences folders to be able remove them !insertmacro UnAppPreSuff $AppPre $AppSuff ; macro from LyXUtils.nsh ; test if Aspell was installed together with LyX ReadRegStr $0 SHCTX "Software\Aspell" "OnlyWithLyX" ; special entry to test if it was installed with LyX ${if} $0 == "Yes${PRODUCT_VERSION_SHORT}" SectionSetText 2 "Aspell" ; names the corersponding uninstaller section (has the index "2" as it is the third section in Uninstall.nsh) StrCpy $AspellInstallYes "Aspell" ${else} SectionSetText 2 "" ; hides the corresponding uninstaller section ${endif} ; test if MiKTeX was installed together with LyX ReadRegStr $0 HKLM "SOFTWARE\MiKTeX.org\MiKTeX" "OnlyWithLyX" ${if} $0 == "Yes${PRODUCT_VERSION_SHORT}" SectionSetText 3 "MiKTeX" ; names the corersponding uninstaller section StrCpy $MiKTeXInstalled "MiKTeX" ${else} SectionSetText 3 "" ; hides the corresponding uninstaller section ${endif} ; test if JabRef was installed together with LyX ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\$JabRefVersionVar" "OnlyWithLyX" ${if} $0 == "Yes${PRODUCT_VERSION_SHORT}" SectionSetText 4 "JabRef" ; names the corersponding uninstaller section StrCpy $JabRefInstalled "JabRef" ${else} SectionSetText 4 "" ; hides the corresponding uninstaller section ${endif} ; question message if the user really wants to uninstall LyX MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "$(UnReallyRemoveLabel)" IDYES +2 ; continue if yes Abort FunctionEnd ; ---------------------------------- Function un.onUninstSuccess HideWindow MessageBox MB_ICONINFORMATION|MB_OK "$(UnRemoveSuccessLabel)" FunctionEnd ; ---------------------------------- ; Uninstall sections 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 LyX's installation folder RMDir /r $INSTDIR ; 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}" DeleteRegKey HKCR "Applications\lyx.exe" DeleteRegKey HKCR "Applications\lyx.bat" ; Aiksaurus !insertmacro FileCheck $5 "meanings.dat" "${AiksaurusDir}" ; macro from LyXUtils.nsh ${if} $5 == "True" RMDir /r "${AiksaurusDir}" ${endif} ReadRegStr $0 SHCTX "Software\Aiksaurus" "OnlyWithLyX" ; special entry to test if it was installed with LyX ${if} $0 == "Yes${PRODUCT_VERSION_SHORT}" ; unregister Aiksaurus ReadRegStr $1 SHCTX "Software\Aiksaurus" "Data Path" RMDir /r "$1" DeleteRegKey SHCTX "SOFTWARE\Aiksaurus" ${endif} ; the following can only be done with admin permissions ${if} $Answer == "yes" ; if admin ; ImageMagick ReadRegStr $0 SHCTX "Software\ImageMagick" "OnlyWithLyX" ; special entry to test if it was installed with LyX ${if} $0 == "Yes${PRODUCT_VERSION_SHORT}" ; unregister ImageMagick DeleteRegValue SHCTX "SOFTWARE\Classes\Applications" "AutoRun" DeleteRegKey SHCTX "SOFTWARE\ImageMagick" ${endif} ; Ghostscript and GSview ReadRegStr $0 HKLM "SOFTWARE\GPL Ghostscript" "OnlyWithLyX" ; special entry to test if it was installed with LyX ${if} $0 == "Yes${PRODUCT_VERSION_SHORT}" ; unregister Ghostscript DeleteRegKey HKLM "SOFTWARE\GPL Ghostscript" ; test if GSview is installed StrCpy $5 "" EnumRegValue $5 HKLM "Software\Ghostgum\GSview" 0 ${if} $5 != "" ; unregister GSview MessageBox MB_ICONINFORMATION|MB_OK "$(UnGSview)" ReadRegStr $3 HKLM "Software\Ghostgum\GSview" "$5" ReadRegStr $4 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\GSview $5" "UninstallString" ExecWait "$4" ${endif} ${endif} ; MiKTeX specific LyX setting DeleteRegValue HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "MIKTEX_AUTOINSTALL" DeleteRegValue HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "MIKTEX_REPOSITORY" ; remove extension .lyx ${RemoveFileAssociation} "${PRODUCT_EXT}" "${PRODUCT_NAME}" DeleteRegKey HKCR "${PRODUCT_NAME}" ${endif} ; end if Answer (if admin) SetAutoClose true SectionEnd ;--------------------------------- ; user preferences Section "un.$(UnLyXPreferencesTitle)" un.SecUnPreferences ; remove LyX's config files Call un.DelAppPathSub ; function from LyXUtils.nsh SectionEnd ;--------------------------------- ; Aspell Section "un.Aspell" un.SecUnAspell ${if} $AspellInstallYes == "Aspell" ; only uninstall Aspell when it was installed together with LyX Call un.UninstAspell ; Function from Aspell.nsh ${endif} SectionEnd ;--------------------------------- ; MiKTeX Section "un.MiKTeX" un.SecUnMiKTeX ${if} $MiKTeXInstalled == "MiKTeX" ; only uninstall MiKTeX when it was installed together with LyX ReadRegStr $1 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\$MiKTeXVersionVar" "UninstallString" ExecWait "$1" ; run MiKTeX's uninstaller ${endif} SectionEnd ;--------------------------------- ; JabRef Section "un.JabRef" un.SecUnJabRef ${if} $JabRefInstalled == "JabRef" ; only uninstall JabRef when it was installed together with LyX ReadRegStr $1 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\$JabRefVersionVar" "UninstallString" ExecWait "$1" ; run JabRef's uninstaller ${endif} SectionEnd ;--------------------------------- ; Section descriptions !insertmacro MUI_UNFUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${un.SecUnAspell} "$(SecUnAspellDescription)" !insertmacro MUI_DESCRIPTION_TEXT ${un.SecUnMiKTeX} "$(SecUnMiKTeXDescription)" !insertmacro MUI_DESCRIPTION_TEXT ${un.SecUnJabRef} "$(SecUnJabRefDescription)" !insertmacro MUI_DESCRIPTION_TEXT ${un.SecUnPreferences} "$(SecUnPreferencesDescription)" !insertmacro MUI_DESCRIPTION_TEXT ${un.SecUnProgramFiles} "$(SecUnProgramFilesDescription)" !insertmacro MUI_UNFUNCTION_DESCRIPTION_END