home *** CD-ROM | disk | FTP | other *** search
- #
- # Library.nsh
- #
- # A system for the installation and uninstallation of dynamic
- # link libraries (DLL) and type libraries (TLB). Using this
- # system you can handle the complete setup with one single
- # line of code:
- #
- # * File copying
- # * File copying on reboot
- # * Version checks
- # * Registration and unregistration
- # * Registration and unregistration on reboot
- # * Shared DLL counting
- # * Windows File Protection checks
- #
- # For more information, read appendix B in the documentation.
- #
-
- !verbose push
- !verbose 3
-
- !ifndef LIB_INCLUDED
-
- !define LIB_INCLUDED
-
- !ifndef SHCNE_ASSOCCHANGED
- !define SHCNE_ASSOCCHANGED 0x08000000
- !endif
- !ifndef SHCNF_IDLIST
- !define SHCNF_IDLIST 0x0000
- !endif
-
- !define REGTOOL_VERSION v3
- !define REGTOOL_KEY NSIS.Library.RegTool.${REGTOOL_VERSION}
-
- !include LogicLib.nsh
- !include x64.nsh
-
- ### GetParent macro, don't pass $1 or $2 as INTPUT or OUTPUT
- !macro __InstallLib_Helper_GetParent INPUT OUTPUT
-
- # Copied from FileFunc.nsh
-
- StrCpy ${OUTPUT} ${INPUT}
-
- Push $1
- Push $2
-
- StrCpy $2 ${OUTPUT} 1 -1
- StrCmp $2 '\' 0 +3
- StrCpy ${OUTPUT} ${OUTPUT} -1
- goto -3
-
- StrCpy $1 0
- IntOp $1 $1 - 1
- StrCpy $2 ${OUTPUT} 1 $1
- StrCmp $2 '\' +2
- StrCmp $2 '' 0 -3
- StrCpy ${OUTPUT} ${OUTPUT} $1
-
- Pop $2
- Pop $1
-
- !macroend
-
- ### Initialize session id (GUID)
- !macro __InstallLib_Helper_InitSession
-
- !ifndef __InstallLib_SessionGUID_Defined
-
- !define __InstallLib_SessionGUID_Defined
-
- Var /GLOBAL __INSTALLLLIB_SESSIONGUID
-
- !endif
-
- !define __InstallLib_Helper_InitSession_Label "Library_${__FILE__}${__LINE__}"
-
- StrCmp $__INSTALLLLIB_SESSIONGUID '' 0 "${__InstallLib_Helper_InitSession_Label}"
-
- System::Call 'ole32::CoCreateGuid(g .s)'
- Pop $__INSTALLLLIB_SESSIONGUID
-
- "${__InstallLib_Helper_InitSession_Label}:"
-
- !undef __InstallLib_Helper_InitSession_Label
-
- !macroend
-
- ### Add a RegTool entry to register after reboot
- !macro __InstallLib_Helper_AddRegToolEntry mode filename tempdir
-
- Push $R0
- Push $R1
- Push $R2
- Push $R3
-
- ;------------------------
- ;Copy the parameters
-
- Push "${filename}"
- Push "${tempdir}"
-
- Pop $R2 ; temporary directory
- Pop $R1 ; file name to register
-
- ;------------------------
- ;Initialize session id
-
- !insertmacro __InstallLib_Helper_InitSession
-
- ;------------------------
- ;Advance counter
-
- StrCpy $R0 0
- ReadRegDWORD $R0 HKLM "Software\${REGTOOL_KEY}\$__INSTALLLLIB_SESSIONGUID" "count"
- IntOp $R0 $R0 + 1
- WriteRegDWORD HKLM "Software\${REGTOOL_KEY}\$__INSTALLLLIB_SESSIONGUID" "count" "$R0"
-
- ;------------------------
- ;Setup RegTool
-
- ReadRegStr $R3 HKLM "Software\Microsoft\Windows\CurrentVersion\RunOnce" "${REGTOOL_KEY}"
- StrCpy $R3 $R3 -4 1
- IfFileExists $R3 +3
-
- File /oname=$R2\${REGTOOL_KEY}.$__INSTALLLLIB_SESSIONGUID.exe "${NSISDIR}\Bin\RegTool.bin"
- WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\RunOnce" \
- "${REGTOOL_KEY}" '"$R2\${REGTOOL_KEY}.$__INSTALLLLIB_SESSIONGUID.exe" /S'
-
- ;------------------------
- ;Add RegTool entry
-
- WriteRegStr HKLM "Software\${REGTOOL_KEY}\$__INSTALLLLIB_SESSIONGUID" "$R0.file" "$R1"
- WriteRegStr HKLM "Software\${REGTOOL_KEY}\$__INSTALLLLIB_SESSIONGUID" "$R0.mode" "${mode}"
-
- Pop $R3
- Pop $R2
- Pop $R1
- Pop $R0
-
- !macroend
-
- ### Get library version
- !macro __InstallLib_Helper_GetVersion TYPE FILE
-
- !tempfile LIBRARY_TEMP_NSH
-
- !ifdef NSIS_WIN32_MAKENSIS
-
- !execute '"${NSISDIR}\Bin\LibraryLocal.exe" "${TYPE}" "${FILE}" "${LIBRARY_TEMP_NSH}"'
-
- !else
-
- !execute 'LibraryLocal "${TYPE}" "${FILE}" "${LIBRARY_TEMP_NSH}"'
-
- !if ${TYPE} == 'T'
-
- !warning "LibraryLocal currently supports TypeLibs version detection on Windows only"
-
- !endif
-
- !endif
-
- !include "${LIBRARY_TEMP_NSH}"
- !delfile "${LIBRARY_TEMP_NSH}"
- !undef LIBRARY_TEMP_NSH
-
- !macroend
-
- ### Install library
- !macro InstallLib libtype shared install localfile destfile tempbasedir
-
- !verbose push
- !verbose 3
-
- Push $R0
- Push $R1
- Push $R2
- Push $R3
- Push $R4
- Push $R5
-
- ;------------------------
- ;Define
-
- !define INSTALLLIB_UNIQUE "${__FILE__}${__LINE__}"
-
- !define INSTALLLIB_LIBTYPE_${libtype}
- !define INSTALLLIB_LIBTYPE_SET INSTALLLIB_LIBTYPE_${libtype}
- !define INSTALLLIB_SHARED_${shared}
- !define INSTALLLIB_SHARED_SET INSTALLLIB_SHARED_${shared}
- !define INSTALLLIB_INSTALL_${install}
- !define INSTALLLIB_INSTALL_SET INSTALLLIB_INSTALL_${install}
-
- ;------------------------
- ;Validate
-
- !ifndef INSTALLLIB_LIBTYPE_DLL & INSTALLLIB_LIBTYPE_REGDLL & INSTALLLIB_LIBTYPE_TLB & \
- INSTALLLIB_LIBTYPE_REGDLLTLB & INSTALLLIB_LIBTYPE_REGEXE
- !error "InstallLib: Incorrect setting for parameter: libtype"
- !endif
-
- !ifndef INSTALLLIB_INSTALL_REBOOT_PROTECTED & INSTALLLIB_INSTALL_REBOOT_NOTPROTECTED & \
- INSTALLLIB_INSTALL_NOREBOOT_PROTECTED & INSTALLLIB_INSTALL_NOREBOOT_NOTPROTECTED
- !error "InstallLib: Incorrect setting for parameter: install"
- !endif
-
- ;------------------------
- ;x64 settings
-
- !ifdef LIBRARY_X64
-
- ${DisableX64FSRedirection}
-
- !endif
-
- ;------------------------
- ;Copy the parameters used on run-time to a variable
- ;This allows the usage of variables as parameter
-
- StrCpy $R4 "${destfile}"
- StrCpy $R5 "${tempbasedir}"
-
- ;------------------------
- ;Shared library count
-
- !ifndef INSTALLLIB_SHARED_NOTSHARED
-
- StrCmp ${shared} "" 0 "installlib.noshareddllincrease_${INSTALLLIB_UNIQUE}"
-
- !ifdef LIBRARY_X64
-
- SetRegView 64
-
- !endif
-
- ReadRegDword $R0 HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R4
- ClearErrors
- IntOp $R0 $R0 + 1
- WriteRegDWORD HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R4 $R0
-
- !ifdef LIBRARY_X64
-
- SetRegView lastused
-
- !endif
-
- "installlib.noshareddllincrease_${INSTALLLIB_UNIQUE}:"
-
- !endif
-
- ;------------------------
- ;Check Windows File Protection
-
- !ifdef INSTALLLIB_INSTALL_REBOOT_PROTECTED | INSTALLLIB_INSTALL_NOREBOOT_PROTECTED
-
- !define LIBRARY_DEFINE_DONE_LABEL
-
- System::Call "sfc::SfcIsFileProtected(i 0, w R4) i.R0"
-
- StrCmp $R0 "error" "installlib.notprotected_${INSTALLLIB_UNIQUE}"
- StrCmp $R0 "0" "installlib.notprotected_${INSTALLLIB_UNIQUE}"
-
- Goto "installlib.done_${INSTALLLIB_UNIQUE}"
-
- "installlib.notprotected_${INSTALLLIB_UNIQUE}:"
-
- !endif
-
- ;------------------------
- ;Check file
-
- IfFileExists $R4 0 "installlib.copy_${INSTALLLIB_UNIQUE}"
-
- ;------------------------
- ;Get version information
-
- !ifndef LIBRARY_IGNORE_VERSION
-
- !insertmacro __InstallLib_Helper_GetVersion D "${LOCALFILE}"
-
- !ifdef LIBRARY_VERSION_FILENOTFOUND
- !error "InstallLib: The library ${LOCALFILE} could not be found."
- !endif
-
- !ifndef LIBRARY_VERSION_NONE
-
- !define LIBRARY_DEFINE_UPGRADE_LABEL
- !define LIBRARY_DEFINE_REGISTER_LABEL
-
- StrCpy $R0 ${LIBRARY_VERSION_HIGH}
- StrCpy $R1 ${LIBRARY_VERSION_LOW}
-
- GetDLLVersion $R4 $R2 $R3
-
- !undef LIBRARY_VERSION_HIGH
- !undef LIBRARY_VERSION_LOW
-
- !ifndef INSTALLLIB_LIBTYPE_TLB & INSTALLLIB_LIBTYPE_REGDLLTLB
-
- IntCmpU $R0 $R2 0 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.upgrade_${INSTALLLIB_UNIQUE}"
- IntCmpU $R1 $R3 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.register_${INSTALLLIB_UNIQUE}" \
- "installlib.upgrade_${INSTALLLIB_UNIQUE}"
-
- !else
-
- !insertmacro __InstallLib_Helper_GetVersion T "${LOCALFILE}"
-
- !ifdef LIBRARY_VERSION_FILENOTFOUND
- !error "InstallLib: The library ${LOCALFILE} could not be found."
- !endif
-
- !ifndef LIBRARY_VERSION_NONE
-
- IntCmpU $R0 $R2 0 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.upgrade_${INSTALLLIB_UNIQUE}"
- IntCmpU $R1 $R3 0 "installlib.register_${INSTALLLIB_UNIQUE}" \
- "installlib.upgrade_${INSTALLLIB_UNIQUE}"
-
- !else
-
- IntCmpU $R0 $R2 0 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.upgrade_${INSTALLLIB_UNIQUE}"
- IntCmpU $R1 $R3 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.register_${INSTALLLIB_UNIQUE}" \
- "installlib.upgrade_${INSTALLLIB_UNIQUE}"
-
- !endif
-
- !endif
-
- !else
-
- !undef LIBRARY_VERSION_NONE
-
- !ifdef INSTALLLIB_LIBTYPE_TLB | INSTALLLIB_LIBTYPE_REGDLLTLB
-
- !insertmacro __InstallLib_Helper_GetVersion T "${LOCALFILE}"
-
- !endif
-
- !endif
-
- !ifdef INSTALLLIB_LIBTYPE_TLB | INSTALLLIB_LIBTYPE_REGDLLTLB
-
- !ifndef LIBRARY_VERSION_NONE
-
- !ifndef LIBRARY_DEFINE_UPGRADE_LABEL
-
- !define LIBRARY_DEFINE_UPGRADE_LABEL
-
- !endif
-
- !ifndef LIBRARY_DEFINE_REGISTER_LABEL
-
- !define LIBRARY_DEFINE_REGISTER_LABEL
-
- !endif
-
- StrCpy $R0 ${LIBRARY_VERSION_HIGH}
- StrCpy $R1 ${LIBRARY_VERSION_LOW}
-
- TypeLib::GetLibVersion $R4
- Pop $R3
- Pop $R2
-
- IntCmpU $R0 $R2 0 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.upgrade_${INSTALLLIB_UNIQUE}"
- IntCmpU $R1 $R3 "installlib.register_${INSTALLLIB_UNIQUE}" "installlib.register_${INSTALLLIB_UNIQUE}" \
- "installlib.upgrade_${INSTALLLIB_UNIQUE}"
-
- !undef LIBRARY_VERSION_HIGH
- !undef LIBRARY_VERSION_LOW
-
- !else
-
- !undef LIBRARY_VERSION_NONE
-
- !endif
-
- !endif
-
- !endif
-
- ;------------------------
- ;Upgrade
-
- !ifdef LIBRARY_DEFINE_UPGRADE_LABEL
-
- !undef LIBRARY_DEFINE_UPGRADE_LABEL
-
- "installlib.upgrade_${INSTALLLIB_UNIQUE}:"
-
- !endif
-
- ;------------------------
- ;Copy
-
- !ifdef INSTALLLIB_INSTALL_NOREBOOT_PROTECTED | INSTALLLIB_INSTALL_NOREBOOT_NOTPROTECTED
-
- "installlib.copy_${INSTALLLIB_UNIQUE}:"
-
- StrCpy $R0 $R4
- Call ":installlib.file_${INSTALLLIB_UNIQUE}"
-
- !else
-
- !ifndef LIBRARY_DEFINE_REGISTER_LABEL
-
- !define LIBRARY_DEFINE_REGISTER_LABEL
-
- !endif
-
- !ifndef LIBRARY_DEFINE_DONE_LABEL
-
- !define LIBRARY_DEFINE_DONE_LABEL
-
- !endif
-
- ClearErrors
-
- StrCpy $R0 $R4
- Call ":installlib.file_${INSTALLLIB_UNIQUE}"
-
- IfErrors 0 "installlib.register_${INSTALLLIB_UNIQUE}"
-
- SetOverwrite lastused
-
- ;------------------------
- ;Copy on reboot
-
- GetTempFileName $R0 $R5
- Call ":installlib.file_${INSTALLLIB_UNIQUE}"
- Rename /REBOOTOK $R0 $R4
-
- ;------------------------
- ;Register on reboot
-
- Call ":installlib.regonreboot_${INSTALLLIB_UNIQUE}"
-
- Goto "installlib.done_${INSTALLLIB_UNIQUE}"
-
- "installlib.copy_${INSTALLLIB_UNIQUE}:"
- StrCpy $R0 $R4
- Call ":installlib.file_${INSTALLLIB_UNIQUE}"
-
- !endif
-
- ;------------------------
- ;Register
-
- !ifdef LIBRARY_DEFINE_REGISTER_LABEL
-
- !undef LIBRARY_DEFINE_REGISTER_LABEL
-
- "installlib.register_${INSTALLLIB_UNIQUE}:"
-
- !endif
-
- !ifdef INSTALLLIB_LIBTYPE_REGDLL | INSTALLLIB_LIBTYPE_TLB | INSTALLLIB_LIBTYPE_REGDLLTLB | INSTALLLIB_LIBTYPE_REGEXE
-
- !ifdef INSTALLLIB_INSTALL_REBOOT_PROTECTED | INSTALLLIB_INSTALL_REBOOT_NOTPROTECTED
-
- IfRebootFlag 0 "installlib.regnoreboot_${INSTALLLIB_UNIQUE}"
-
- Call ":installlib.regonreboot_${INSTALLLIB_UNIQUE}"
-
- Goto "installlib.registerfinish_${INSTALLLIB_UNIQUE}"
-
- "installlib.regnoreboot_${INSTALLLIB_UNIQUE}:"
-
- !endif
-
- !ifdef INSTALLLIB_LIBTYPE_TLB | INSTALLLIB_LIBTYPE_REGDLLTLB
-
- TypeLib::Register $R4
-
- !endif
-
- !ifdef INSTALLLIB_LIBTYPE_REGDLL | INSTALLLIB_LIBTYPE_REGDLLTLB
-
- !ifndef LIBRARY_X64
-
- RegDll $R4
-
- !else
-
- ExecWait '"$SYSDIR\regsvr32.exe" /s "$R4"'
-
- !endif
-
- !endif
-
- !ifdef INSTALLLIB_LIBTYPE_REGEXE
-
- ExecWait '"$R4" /regserver'
-
- !endif
-
- !ifdef INSTALLLIB_INSTALL_REBOOT_PROTECTED | INSTALLLIB_INSTALL_REBOOT_NOTPROTECTED
-
- "installlib.registerfinish_${INSTALLLIB_UNIQUE}:"
-
- !endif
-
- !endif
-
- !ifdef LIBRARY_SHELL_EXTENSION
-
- System::Call 'Shell32::SHChangeNotify(i ${SHCNE_ASSOCCHANGED}, i ${SHCNF_IDLIST}, i 0, i 0)'
-
- !endif
-
- !ifdef LIBRARY_COM
-
- System::Call 'Ole32::CoFreeUnusedLibraries()'
-
- !endif
-
- ;------------------------
- ;Done
-
- !ifdef LIBRARY_DEFINE_DONE_LABEL
-
- !undef LIBRARY_DEFINE_DONE_LABEL
-
- "installlib.done_${INSTALLLIB_UNIQUE}:"
-
- !endif
-
- Pop $R5
- Pop $R4
- Pop $R3
- Pop $R2
- Pop $R1
- Pop $R0
-
- ;------------------------
- ;End
-
- Goto "installlib.end_${INSTALLLIB_UNIQUE}"
-
- ;------------------------
- ;Extract
-
- !ifdef INSTALLLIB_INSTALL_REBOOT_PROTECTED | INSTALLLIB_INSTALL_REBOOT_NOTPROTECTED
-
- SetOverwrite try
-
- !else
-
- SetOverwrite on
-
- !endif
-
- "installlib.file_${INSTALLLIB_UNIQUE}:"
- SetFileAttributes $R0 FILE_ATTRIBUTE_NORMAL
- ClearErrors
- File /oname=$R0 "${LOCALFILE}"
- Return
-
- SetOverwrite lastused
-
- ;------------------------
- ;Register on reboot
-
- !ifdef INSTALLLIB_INSTALL_REBOOT_PROTECTED | INSTALLLIB_INSTALL_REBOOT_NOTPROTECTED
-
- "installlib.regonreboot_${INSTALLLIB_UNIQUE}:"
-
- !ifdef INSTALLLIB_LIBTYPE_REGDLL | INSTALLLIB_LIBTYPE_REGDLLTLB
- !ifndef LIBRARY_X64
- !insertmacro __InstallLib_Helper_AddRegToolEntry 'D' "$R4" "$R5"
- !else
- !insertmacro __InstallLib_Helper_AddRegToolEntry 'DX' "$R4" "$R5"
- !endif
- !endif
-
- !ifdef INSTALLLIB_LIBTYPE_TLB | INSTALLLIB_LIBTYPE_REGDLLTLB
- !insertmacro __InstallLib_Helper_AddRegToolEntry 'T' "$R4" "$R5"
- !endif
-
- !ifdef INSTALLLIB_LIBTYPE_REGEXE
- !insertmacro __InstallLib_Helper_AddRegToolEntry 'E' "$R4" "$R5"
- !endif
-
- Return
-
- !endif
-
- ;------------------------
- ;End label
-
- "installlib.end_${INSTALLLIB_UNIQUE}:"
-
- !ifdef LIBRARY_X64
-
- ${EnableX64FSRedirection}
-
- !endif
-
- ;------------------------
- ;Undefine
-
- !undef INSTALLLIB_UNIQUE
-
- !undef ${INSTALLLIB_LIBTYPE_SET}
- !undef INSTALLLIB_LIBTYPE_SET
- !undef ${INSTALLLIB_SHARED_SET}
- !undef INSTALLLIB_SHARED_SET
- !undef ${INSTALLLIB_INSTALL_SET}
- !undef INSTALLLIB_INSTALL_SET
-
- !verbose pop
-
- !macroend
-
- ### Uninstall library
- !macro UnInstallLib libtype shared uninstall file
-
- !verbose push
- !verbose 3
-
- Push $R0
- Push $R1
-
- ;------------------------
- ;Define
-
- !define UNINSTALLLIB_UNIQUE "${__FILE__}${__LINE__}"
-
- !define UNINSTALLLIB_LIBTYPE_${libtype}
- !define UNINSTALLLIB_LIBTYPE_SET UNINSTALLLIB_LIBTYPE_${libtype}
- !define UNINSTALLLIB_SHARED_${shared}
- !define UNINSTALLLIB_SHARED_SET UNINSTALLLIB_SHARED_${shared}
- !define UNINSTALLLIB_UNINSTALL_${uninstall}
- !define UNINSTALLLIB_UNINSTALL_SET UNINSTALLLIB_UNINSTALL_${uninstall}
-
- ;------------------------
- ;Validate
-
- !ifndef UNINSTALLLIB_LIBTYPE_DLL & UNINSTALLLIB_LIBTYPE_REGDLL & UNINSTALLLIB_LIBTYPE_TLB & \
- UNINSTALLLIB_LIBTYPE_REGDLLTLB & UNINSTALLLIB_LIBTYPE_REGEXE
- !error "UnInstallLib: Incorrect setting for parameter: libtype"
- !endif
-
- !ifndef UNINSTALLLIB_SHARED_NOTSHARED & UNINSTALLLIB_SHARED_SHARED
- !error "UnInstallLib: Incorrect setting for parameter: shared"
- !endif
-
- !ifndef UNINSTALLLIB_UNINSTALL_NOREMOVE & UNINSTALLLIB_UNINSTALL_REBOOT_PROTECTED & \
- UNINSTALLLIB_UNINSTALL_REBOOT_NOTPROTECTED & UNINSTALLLIB_UNINSTALL_NOREBOOT_PROTECTED & \
- UNINSTALLLIB_UNINSTALL_NOREBOOT_NOTPROTECTED
- !error "UnInstallLib: Incorrect setting for parameter: uninstall"
- !endif
-
- ;------------------------
- ;x64 settings
-
- !ifdef LIBRARY_X64
-
- ${DisableX64FSRedirection}
-
- !endif
-
- ;------------------------
- ;Copy the parameters used on run-time to a variable
- ;This allows the usage of variables as parameter
-
- StrCpy $R1 "${file}"
-
- ;------------------------
- ;Shared library count
-
- !ifdef UNINSTALLLIB_SHARED_SHARED
-
- !define UNINSTALLLIB_DONE_LABEL
-
- !ifdef LIBRARY_X64
-
- SetRegView 64
-
- !endif
-
- ReadRegDword $R0 HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1
- StrCmp $R0 "" "uninstalllib.shareddlldone_${UNINSTALLLIB_UNIQUE}"
-
- IntOp $R0 $R0 - 1
- IntCmp $R0 0 "uninstalllib.shareddllremove_${UNINSTALLLIB_UNIQUE}" \
- "uninstalllib.shareddllremove_${UNINSTALLLIB_UNIQUE}" "uninstalllib.shareddllinuse_${UNINSTALLLIB_UNIQUE}"
-
- "uninstalllib.shareddllremove_${UNINSTALLLIB_UNIQUE}:"
- DeleteRegValue HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1
- !ifndef UNINSTALLLIB_SHARED_SHAREDNOREMOVE
- Goto "uninstalllib.shareddlldone_${UNINSTALLLIB_UNIQUE}"
- !endif
-
- "uninstalllib.shareddllinuse_${UNINSTALLLIB_UNIQUE}:"
- WriteRegDWORD HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1 $R0
-
- !ifdef LIBRARY_X64
-
- SetRegView lastused
-
- !endif
-
- Goto "uninstalllib.done_${UNINSTALLLIB_UNIQUE}"
-
- "uninstalllib.shareddlldone_${UNINSTALLLIB_UNIQUE}:"
-
- !ifdef LIBRARY_X64
-
- SetRegView lastused
-
- !endif
-
- !endif
-
- ;------------------------
- ;Remove
-
- !ifndef UNINSTALLLIB_UNINSTALL_NOREMOVE
-
- ;------------------------
- ;Check Windows File Protection
-
- !ifdef UNINSTALLLIB_UNINSTALL_REBOOT_PROTECTED | UNINSTALLLIB_UNINSTALL_NOREBOOT_PROTECTED
-
- !ifndef UNINSTALLLIB_DONE_LABEL
-
- !define UNINSTALLLIB_DONE_LABEL
-
- !endif
-
- System::Call "sfc::SfcIsFileProtected(i 0, w $R1) i.R0"
-
- StrCmp $R0 "error" "uninstalllib.notprotected_${UNINSTALLLIB_UNIQUE}"
- StrCmp $R0 "0" "uninstalllib.notprotected_${UNINSTALLLIB_UNIQUE}"
-
- Goto "uninstalllib.done_${UNINSTALLLIB_UNIQUE}"
-
- "uninstalllib.notprotected_${UNINSTALLLIB_UNIQUE}:"
-
- !endif
-
- ;------------------------
- ;Unregister
-
- !ifdef UNINSTALLLIB_LIBTYPE_REGDLL | UNINSTALLLIB_LIBTYPE_REGDLLTLB
-
- !ifndef LIBRARY_X64
-
- UnRegDLL $R1
-
- !else
-
- ExecWait '"$SYSDIR\regsvr32.exe" /s /u "$R1"'
-
- !endif
-
- !endif
-
- !ifdef UNINSTALLLIB_LIBTYPE_REGEXE
-
- ExecWait '"$R1" /unregserver'
-
- !endif
-
- !ifdef UNINSTALLLIB_LIBTYPE_TLB | UNINSTALLLIB_LIBTYPE_REGDLLTLB
-
- TypeLib::UnRegister $R1
-
- !endif
-
- !ifdef LIBRARY_SHELL_EXTENSION
-
- System::Call 'Shell32::SHChangeNotify(i ${SHCNE_ASSOCCHANGED}, i ${SHCNF_IDLIST}, i 0, i 0)'
-
- !endif
-
- !ifdef LIBRARY_COM
-
- System::Call 'Ole32::CoFreeUnusedLibraries()'
-
- !endif
-
- ;------------------------
- ;Delete
-
- Delete $R1
-
- !ifdef UNINSTALLLIB_UNINSTALL_REBOOT_PROTECTED | UNINSTALLLIB_UNINSTALL_REBOOT_NOTPROTECTED
-
- ${If} ${FileExists} $R1
- # File is in use, can't just delete.
- # Move file to another location before using Delete /REBOOTOK. This way, if
- # the user installs a new version of the DLL, it won't be deleted after
- # reboot. See bug #1097642 for more information on this.
-
- # Try moving to $TEMP.
- GetTempFileName $R0
- Delete $R0
- Rename $R1 $R0
-
- ${If} ${FileExists} $R1
- # Still here, delete temporary file, in case the file was copied
- # and not deleted. This happens when moving from network drives,
- # for example.
- Delete $R0
-
- # Try moving to directory containing the file.
- !insertmacro __InstallLib_Helper_GetParent $R1 $R0
- GetTempFileName $R0 $R0
- Delete $R0
- Rename $R1 $R0
-
- ${If} ${FileExists} $R1
- # Still here, delete temporary file.
- Delete $R0
-
- # Give up moving, simply Delete /REBOOTOK the file.
- StrCpy $R0 $R1
- ${EndIf}
- ${EndIf}
-
- # Delete the moved file.
- Delete /REBOOTOK $R0
- ${EndIf}
-
- !endif
-
- !endif
-
- ;------------------------
- ;Done
-
- !ifdef UNINSTALLLIB_DONE_LABEL
-
- !undef UNINSTALLLIB_DONE_LABEL
-
- "uninstalllib.done_${UNINSTALLLIB_UNIQUE}:"
-
- !endif
-
- !ifdef LIBRARY_X64
-
- ${EnableX64FSRedirection}
-
- !endif
-
- Pop $R1
- Pop $R0
-
- ;------------------------
- ;Undefine
-
- !undef UNINSTALLLIB_UNIQUE
-
- !undef ${UNINSTALLLIB_LIBTYPE_SET}
- !undef UNINSTALLLIB_LIBTYPE_SET
- !undef ${UNINSTALLLIB_SHARED_SET}
- !undef UNINSTALLLIB_SHARED_SET
- !undef ${UNINSTALLLIB_UNINSTALL_SET}
- !undef UNINSTALLLIB_UNINSTALL_SET
-
- !verbose pop
-
- !macroend
-
- !endif
-
- !verbose pop
-