; PowerToy Calculator Vista Installer ; ; Douglas Thrift ; ; $Id$ !define POWERCALC "PowerToy Calculator" !define POWERCALCVISTA "${POWERCALC} Vista" Name "${POWERCALCVISTA}" OutFile "powercalcvista.exe" SetCompressor /SOLID lzma ShowInstDetails show ShowUninstDetails show XPStyle on !define UNINST_REG \ "Software\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" !define UNINST_EXE "powercalcvista-uninst.exe" !define POWERCALC_EXE "PowerCalc.exe" !define POWERCALC_CHM "calcpt.chm" !define POWERCALC_LNK "${POWERCALC}.lnk" !define POWERCALC_HELP_LNK "${POWERCALC} Help.lnk" !define POWERTOYS "Powertoys for Windows XP" !define MULTIUSER_EXECUTIONLEVEL "Highest" !define MULTIUSER_INSTALLMODE_COMMANDLINE !define MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY "${UNINST_REG}" !define MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME "UninstallString" !define MULTIUSER_INSTALLMODE_INSTDIR "${POWERCALC}" !define MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_KEY "${UNINST_REG}" !define MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_VALUENAME "InstallLocation" !define MULTIUSER_MUI !include "MultiUser.nsh" !include "MUI2.nsh" !define MUI_COMPONENTSPAGE_NODESC !define MUI_FINISHPAGE_NOAUTOCLOSE !define MUI_FINISHPAGE_RUN "$INSTDIR\${POWERCALC_EXE}" !define MUI_FINISHPAGE_RUN_NOTCHECKED !define MUI_UNFINISHPAGE_NOAUTOCLOSE !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH !insertmacro MUI_UNPAGE_WELCOME !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_UNPAGE_FINISH !insertmacro MUI_LANGUAGE "English" !define POWERCALC_GUID "{B37C842A-B624-46B8-A727-654E72F1C91A}" !define POWERCALC_REG \ "Software\Microsoft\Windows\CurrentVersion\Uninstall\${POWERCALC_GUID}" !addincludedir include !include "ShellExecute.nsh" !include "ShellFolder.nsh" !include "x64.nsh" !addplugindir plugins !macro REGISTRY ROOT WriteRegStr ${ROOT} "${UNINST_REG}" "DisplayName" "$(^Name)" WriteRegStr ${ROOT} "${UNINST_REG}" "UninstallString" \ "$INSTDIR\${UNINST_EXE}" WriteRegStr ${ROOT} "${UNINST_REG}" "InstallLocation" "$INSTDIR" WriteRegDWORD ${ROOT} "${UNINST_REG}" "NoModify" 1 WriteRegDWORD ${ROOT} "${UNINST_REG}" "NoRepair" 1 !macroend !macro UN_REGISTRY ROOT DeleteRegKey ${ROOT} "${UNINST_REG}" !macroend !macro SYSWOW64 StrCpy $SysWOW64 "" ${If} ${RunningX64} ${DisableX64FSRedirection} ShellFolder::GetFolderPath ${CSIDL_SYSTEMX86} ${SHGFP_TYPE_CURRENT} Pop $R0 Pop $R1 IntCmp $R0 0 +2 0 +2 Abort "$R1" StrCpy $SysWOW64 $R1 ${Endif} !macroend Var SysWOW64 Section /o "-Uninstall MSI" UninstallMSI ClearErrors ExecWait '"$SYSDIR\msiexec.exe" /x ${POWERCALC_GUID} /passive' IfErrors 0 +2 Abort SectionEnd Section /o "-Uninstall Files" UninstallFiles StrCmpS $SysWOW64 "" +3 Delete /REBOOTOK "$SysWOW64\${POWERCALC_EXE}" Delete /REBOOTOK "$SysWOW64\${POWERCALC_CHM}" Delete /REBOOTOK "$SYSDIR\${POWERCALC_EXE}" Delete /REBOOTOK "$SYSDIR\${POWERCALC_CHM}" SectionEnd Section "!${POWERCALC}" SectionIn 1 RO SetOutPath "$INSTDIR" WriteUninstaller "${UNINST_EXE}" StrCmpS $MultiUser.InstallMode "AllUsers" AllUsers !insertmacro REGISTRY HKCU Goto Files AllUsers: !insertmacro REGISTRY HKLM Files: File "${POWERCALC_EXE}" File "${POWERCALC_CHM}" StrCmpS $MultiUser.InstallMode "AllUsers" 0 +5 StrCpy $0 $SYSDIR StrCmpS $SysWOW64 "" +2 StrCpy $0 $SysWOW64 CopyFiles /SILENT /FILESONLY "$INSTDIR\${POWERCALC_CHM}" "$0" SectionEnd SectionGroup /e "Shortcuts" Section "Start Menu" SectionIn 1 RO Push "$SMPROGRAMS\${POWERTOYS}" Call Shortcut CreateShortCut "$SMPROGRAMS\${POWERTOYS}\${POWERCALC_HELP_LNK}" \ "$INSTDIR\${POWERCALC_CHM}" ShellLink::SetShortCutWorkingDirectory \ "$SMPROGRAMS\${POWERTOYS}\${POWERCALC_HELP_LNK}" "" SectionEnd Section /o "Desktop" Desktop Push "$DESKTOP" Call Shortcut SectionEnd Section /o "Quick Launch" QuickLaunch Push "$QUICKLAUNCH" Call Shortcut SectionEnd SectionGroupEnd Section /o "Compatibility Mode" Compatibility SectionIn 1 RO DetailPrint "ShellExecute: properties ${POWERCALC_EXE}" ShellExecute::Ex ${SEE_MASK_INVOKEIDLIST} "properties" "${POWERCALC_EXE}" \ ${NULL} SW_SHOWNORMAL Pop $R0 Pop $R1 IntCmp $R0 1 +2 Abort "$R1" SectionEnd Section "un.$(^Name)" Delete /REBOOTOK "$SMPROGRAMS\${POWERTOYS}\${POWERCALC_LNK}" Delete /REBOOTOK "$SMPROGRAMS\${POWERTOYS}\${POWERCALC_HELP_LNK}" RMDir /REBOOTOK "$SMPROGRAMS\${POWERTOYS}" Delete /REBOOTOK "$DESKTOP\${POWERCALC_LNK}" Delete /REBOOTOK "$QUICKLAUNCH\${POWERCALC_LNK}" Delete /REBOOTOK "$INSTDIR\${POWERCALC_EXE}" Delete /REBOOTOK "$INSTDIR\${POWERCALC_CHM}" Delete /REBOOTOK "$INSTDIR\${UNINST_EXE}" StrCmpS $MultiUser.InstallMode "AllUsers" 0 +5 StrCpy $0 $SYSDIR StrCmpS $SysWOW64 "" +2 StrCpy $0 $SysWOW64 Delete /REBOOTOK "$0\${POWERCALC_CHM}" RMDir /REBOOTOK "$INSTDIR" StrCmpS $MultiUser.InstallMode "AllUsers" AllUsers !insertmacro UN_REGISTRY HKCU Return AllUsers: !insertmacro UN_REGISTRY HKLM SectionEnd Function .onInit !insertmacro MULTIUSER_INIT IfFileExists "$DESKTOP\${POWERCALC_LNK}" 0 +4 SectionGetFlags ${Desktop} $0 IntOp $0 $0 | ${SF_SELECTED} SectionSetFlags ${Desktop} $0 IfFileExists "$QUICKLAUNCH\${POWERCALC_LNK}" 0 +4 SectionGetFlags ${QuickLaunch} $0 IntOp $0 $0 | ${SF_SELECTED} SectionSetFlags ${QuickLaunch} $0 !insertmacro SYSWOW64 Version::GetWindowsVersion Pop $R0 Pop $R1 Pop $R2 Pop $R3 Pop $R4 IntCmpU $R0 6 0 +5 SectionGetFlags ${Compatibility} $0 IntOp $0 $0 | ${SF_SELECTED} IntOp $0 $0 | ${SF_BOLD} SectionSetFlags ${Compatibility} $0 StrCmpS $MultiUser.InstallMode "AllUsers" +2 Return ClearErrors ReadRegStr $0 HKLM "${POWERCALC_REG}" "UninstallString" IfErrors Files MessageBox MB_OKCANCEL|MB_ICONINFORMATION \ "${POWERCALC} is already installed. It will be uninstalled first." /SD \ IDOK IDOK +2 Quit SectionGetFlags ${UninstallMSI} $0 IntOp $0 $0 | ${SF_SELECTED} SectionSetFlags ${UninstallMSI} $0 Return Files: IfFileExists "$SYSDIR\${POWERCALC_EXE}" Exists IfFileExists "$SYSDIR\${POWERCALC_CHM}" Exists StrCmpS $SysWOW64 "" +3 IfFileExists "$SysWOW64\${POWERCALC_EXE}" Exists IfFileExists "$SysWOW64\${POWERCALC_CHM}" Exists Return Exists: MessageBox MB_OKCANCEL|MB_ICONINFORMATION \ "${POWERCALC} is already installed. It will be uninstalled first." /SD \ IDOK IDOK +2 Quit SectionGetFlags ${UninstallFiles} $0 IntOp $0 $0 | ${SF_SELECTED} SectionSetFlags ${UninstallFiles} $0 FunctionEnd Function un.onInit !insertmacro MULTIUSER_UNINIT !insertmacro SYSWOW64 FunctionEnd Function Shortcut Pop $0 IfFileExists "$0\*.*" +2 CreateDirectory "$0" CreateShortCut "$0\${POWERCALC_LNK}" "$INSTDIR\${POWERCALC_EXE}" "" "" "" \ "" "" "Calculator with Support for Advanced functions" ShellLink::SetShortCutWorkingDirectory "$0\${POWERCALC_LNK}" "" Pop $R0 FunctionEnd # vim: autoindent