midori/win32/makedist/midori-0.3.3.nsi

641 lines
21 KiB
Plaintext

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Copyright (C) 2009 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
; 2010-2011 Peter de Ridder <peter(at)xfce(dot)org>
;
; This library is free software; you can redistribute it and/or
; modify it under the terms of the GNU Lesser General Public
; License as published by the Free Software Foundation; either
; version 2.1 of the License, or (at your option) any later version.
;
; See the file COPYING for the full license text.
;
; Installer script for Midori (Windows Installer)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Do a Cyclic Redundancy Check to make sure the installer was not corrupted by the download
CRCCheck force
RequestExecutionLevel user ; set execution level for Windows Vista
;;;;;;;;;;;;;;;;;;;
; helper defines ;
;;;;;;;;;;;;;;;;;;;
!define PRODUCT_NAME "Midori"
!define PRODUCT_VERSION "0.3.3"
!define PRODUCT_BUILD "0"
!define PRODUCT_VERSION_ID "${PRODUCT_VERSION}.${PRODUCT_BUILD}"
!define PRODUCT_PUBLISHER "Christian Dywan"
!define PRODUCT_WEB_SITE "http://www.midori-browser.org"
!define PRODUCT_DIR_REGKEY "Software\${PRODUCT_NAME}"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_BROWER_KEY "Software\Clients\StartMenuInternet"
!define PRODUCT_EXE "$INSTDIR\bin\midori.exe"
!define UNINSTALL_EXE "$INSTDIR\uninst.exe"
!define RESOURCEDIR "midori-${PRODUCT_VERSION}"
!define ICON_THEME "Faenza"
;;;;;;;;;;;;;;;;;;;;;
; Version resource ;
;;;;;;;;;;;;;;;;;;;;;
VIProductVersion "${PRODUCT_VERSION_ID}"
VIAddVersionKey "ProductName" "${PRODUCT_NAME}"
VIAddVersionKey "FileVersion" "${PRODUCT_VERSION}"
VIAddVersionKey "ProductVersion" "${PRODUCT_VERSION}"
VIAddVersionKey "LegalCopyright" "Copyright 2009-2012 by Christian Dywan"
VIAddVersionKey "FileDescription" "${PRODUCT_NAME} Installer"
BrandingText "$(^NAME) installer (NSIS ${NSIS_VERSION})"
InstallDir "$PROGRAMFILES\${PRODUCT_NAME}"
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
SetCompressor /SOLID lzma
ShowInstDetails hide
ShowUnInstDetails hide
XPStyle on
OutFile "${PRODUCT_NAME}-${PRODUCT_VERSION}_setup.exe"
Var Answer
Var UserName
Var StartmenuFolder
Var UNINSTDIR
Var DefaultBrowser
;;;;;;;;;;;;;;;;
; MUI Settings ;
;;;;;;;;;;;;;;;;
!include "MUI2.nsh"
!define MUI_ABORTWARNING
!define MUI_ICON "midori.ico"
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall-full.ico"
; Welcome page
!insertmacro MUI_PAGE_WELCOME
; License page
;!define MUI_LICENSEPAGE_RADIOBUTTONS
!insertmacro MUI_PAGE_LICENSE "${RESOURCEDIR}\COPYING"
; Components page
!insertmacro MUI_PAGE_COMPONENTS
; Directory page
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE OnDirLeave
!insertmacro MUI_PAGE_DIRECTORY
; Start menu page
!define MUI_STARTMENUPAGE_DEFAULTFOLDER "Midori"
!define MUI_STARTMENUPAGE_REGISTRY_ROOT HKLM
!define MUI_STARTMENUPAGE_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
!insertmacro MUI_PAGE_STARTMENU ${PRODUCT_NAME} "$StartmenuFolder"
; Instfiles page
!insertmacro MUI_PAGE_INSTFILES
; Finish page
!define MUI_FINISHPAGE_RUN "${PRODUCT_EXE}"
!define MUI_FINISHPAGE_RUN_NOTCHECKED
!define MUI_FINISHPAGE_NOREBOOTSUPPORT
!insertmacro MUI_PAGE_FINISH
; Uninstaller page
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_UNPAGE_FINISH
; Language file
!insertmacro MUI_LANGUAGE "English"
;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Sections and InstTypes ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;
InstType "Full"
InstType "Minimal"
Section "!Program Files" SEC01
SectionIn RO 1 2
SetOverwrite ifnewer
SetOutPath "$INSTDIR"
File "${RESOURCEDIR}\*"
SetOutPath "$INSTDIR\bin"
File /r "${RESOURCEDIR}\bin\*"
SetOutPath "$INSTDIR\etc"
File /r "${RESOURCEDIR}\etc\*"
SetOutPath "$INSTDIR\lib"
File /r /x "midori" "${RESOURCEDIR}\lib\*"
SetOutPath "$INSTDIR\share"
File /r /x "locale" /x "user" /x "${ICON_THEME}" "${RESOURCEDIR}\share\*"
SetOutPath "$INSTDIR\share\icons\${ICON_THEME}"
File "${RESOURCEDIR}\share\icons\${ICON_THEME}\index.theme"
SetOutPath "$INSTDIR"
CreateShortCut "$INSTDIR\Midori.lnk" "${PRODUCT_EXE}"
!insertmacro MUI_STARTMENU_WRITE_BEGIN ${PRODUCT_NAME}
CreateDirectory "$SMPROGRAMS\$StartmenuFolder"
CreateShortCut "$SMPROGRAMS\$StartmenuFolder\Midori.lnk" "${PRODUCT_EXE}"
!insertmacro MUI_STARTMENU_WRITE_END
SectionEnd
Section "Extensions" SEC04
SectionIn 1
SetOverwrite ifnewer
SetOutPath "$INSTDIR\lib"
File /r "${RESOURCEDIR}\lib\midori"
SectionEnd
Section "Language Files" SEC02
SectionIn 1
SetOutPath "$INSTDIR\share"
File /r "${RESOURCEDIR}\share\locale"
SectionEnd
Section "FAQ" SEC06
SectionIn 1
SetOutPath "$INSTDIR\share\doc\midori"
File "${RESOURCEDIR}\share\doc\midori\faq.css"
File "${RESOURCEDIR}\share\doc\midori\faq.html"
SectionEnd
!macro InstallIconThemeRenameSmall OPath IPath
File "/oname=16x16\${OPath}.png" "${RESOURCEDIR}\share\icons\${ICON_THEME}\16x16\${IPath}.png"
File "/oname=22x22\${OPath}.png" "${RESOURCEDIR}\share\icons\${ICON_THEME}\22x22\${IPath}.png"
File "/oname=24x24\${OPath}.png" "${RESOURCEDIR}\share\icons\${ICON_THEME}\24x24\${IPath}.png"
File "/oname=32x32\${OPath}.png" "${RESOURCEDIR}\share\icons\${ICON_THEME}\32x32\${IPath}.png"
!macroend
!macro InstallIconThemeRename OPath IPath
!insertmacro InstallIconThemeRenameSmall ${OPath} ${IPath}
File "/oname=48x48\${OPath}.png" "${RESOURCEDIR}\share\icons\${ICON_THEME}\48x48\${IPath}.png"
File "/oname=scalable\${OPath}.svg" "${RESOURCEDIR}\share\icons\${ICON_THEME}\scalable\${IPath}.svg"
!macroend
!macro InstallIconThemeSmall IconPath
!insertmacro InstallIconThemeRenameSmall ${IconPath} ${IconPath}
!macroend
!macro InstallIconTheme IconPath
!insertmacro InstallIconThemeRename ${IconPath} ${IconPath}
!macroend
!macro CreateIconThemeSectionsSmall SectionPath
CreateDirectory "$INSTDIR\share\icons\${ICON_THEME}\16x16\${SectionPath}"
CreateDirectory "$INSTDIR\share\icons\${ICON_THEME}\22x22\${SectionPath}"
CreateDirectory "$INSTDIR\share\icons\${ICON_THEME}\24x24\${SectionPath}"
CreateDirectory "$INSTDIR\share\icons\${ICON_THEME}\32x32\${SectionPath}"
!macroend
!macro CreateIconThemeSections SectionPath
!insertmacro CreateIconThemeSectionsSmall ${SectionPath}
CreateDirectory "$INSTDIR\share\icons\${ICON_THEME}\48x48\${SectionPath}"
CreateDirectory "$INSTDIR\share\icons\${ICON_THEME}\scalable\${SectionPath}"
!macroend
Section "${ICON_THEME} icons" SEC07
SectionIn 1
SetOutPath "$INSTDIR\share\icons\${ICON_THEME}"
!insertmacro CreateIconThemeSections "actions"
#!insertmacro CreateIconThemeSectionsSmall "animations"
!insertmacro CreateIconThemeSections "apps"
!insertmacro CreateIconThemeSections "categories"
!insertmacro CreateIconThemeSections "devices"
!insertmacro CreateIconThemeSections "mimetypes"
!insertmacro CreateIconThemeSections "places"
!insertmacro CreateIconThemeSections "status"
!insertmacro InstallIconTheme "actions\bookmark-new"
!insertmacro InstallIconTheme "actions\document-open"
!insertmacro InstallIconTheme "actions\document-open-recent"
!insertmacro InstallIconTheme "actions\document-print"
!insertmacro InstallIconTheme "actions\document-properties"
!insertmacro InstallIconTheme "actions\document-save-as"
!insertmacro InstallIconTheme "actions\document-save"
!insertmacro InstallIconTheme "actions\edit-clear"
!insertmacro InstallIconTheme "actions\edit-copy"
!insertmacro InstallIconTheme "actions\edit-cut"
!insertmacro InstallIconTheme "actions\edit-delete"
!insertmacro InstallIconTheme "actions\edit-find"
!insertmacro InstallIconTheme "actions\edit-paste"
!insertmacro InstallIconTheme "actions\edit-redo"
!insertmacro InstallIconTheme "actions\edit-select-all"
!insertmacro InstallIconTheme "actions\edit-undo"
!insertmacro InstallIconTheme "actions\folder-new"
!insertmacro InstallIconTheme "actions\format-indent-more"
!insertmacro InstallIconTheme "actions\go-home"
!insertmacro InstallIconTheme "actions\go-jump"
!insertmacro InstallIconTheme "actions\go-next"
!insertmacro InstallIconTheme "actions\go-previous"
!insertmacro InstallIconTheme "actions\gtk-cancel"
!insertmacro InstallIconTheme "actions\gtk-edit"
!insertmacro InstallIconTheme "actions\gtk-no"
!insertmacro InstallIconTheme "actions\gtk-ok"
!insertmacro InstallIconTheme "actions\gtk-save"
!insertmacro InstallIconTheme "actions\help-about"
!insertmacro InstallIconTheme "actions\help-contents"
!insertmacro InstallIconTheme "actions\list-add"
!insertmacro InstallIconTheme "actions\list-remove"
!insertmacro InstallIconTheme "actions\media-skip-backward"
!insertmacro InstallIconTheme "actions\media-skip-forward"
!insertmacro InstallIconTheme "actions\process-stop"
!insertmacro InstallIconTheme "actions\stop"
!insertmacro InstallIconTheme "actions\tab-new"
!insertmacro InstallIconTheme "actions\tools-check-spelling"
!insertmacro InstallIconTheme "actions\view-fullscreen"
!insertmacro InstallIconTheme "actions\view-refresh"
!insertmacro InstallIconTheme "actions\window-close"
!insertmacro InstallIconTheme "actions\window-new"
!insertmacro InstallIconTheme "actions\zoom-in"
!insertmacro InstallIconTheme "actions\zoom-out"
#!insertmacro InstallIconThemeSmall "animations\process-working"
!insertmacro InstallIconTheme "apps\internet-news-reader"
!insertmacro InstallIconTheme "apps\midori"
!insertmacro InstallIconTheme "apps\preferences-desktop-theme"
!insertmacro InstallIconTheme "apps\web-browser"
!insertmacro InstallIconTheme "categories\gtk-preferences"
!insertmacro InstallIconTheme "devices\drive-harddisk"
!insertmacro InstallIconTheme "devices\media-optical-dvd-rom"
!insertmacro InstallIconTheme "mimetypes\application-x-shockwave-flash"
!insertmacro InstallIconTheme "mimetypes\extension"
!insertmacro InstallIconTheme "mimetypes\gtk-file"
!insertmacro InstallIconTheme "mimetypes\image-x-generic"
!insertmacro InstallIconTheme "mimetypes\package"
!insertmacro InstallIconTheme "mimetypes\text-html"
!insertmacro InstallIconTheme "mimetypes\text-x-generic"
!insertmacro InstallIconTheme "mimetypes\text-x-javascript"
!insertmacro InstallIconTheme "places\folder-documents"
!insertmacro InstallIconTheme "places\folder-downloads"
!insertmacro InstallIconTheme "places\folder-music"
!insertmacro InstallIconTheme "places\folder-pictures"
!insertmacro InstallIconTheme "places\folder"
!insertmacro InstallIconTheme "places\folder-videos"
!insertmacro InstallIconTheme "places\inode-directory"
!insertmacro InstallIconTheme "places\user-bookmarks"
!insertmacro InstallIconTheme "places\user-desktop"
!insertmacro InstallIconTheme "places\user-home"
!insertmacro InstallIconTheme "places\user-trash"
!insertmacro InstallIconTheme "status\dialog-password"
#!insertmacro InstallIconTheme "status\locked"
SectionEnd
Section "Desktop Shortcuts" SEC03
SectionIn 1
CreateShortCut "$DESKTOP\Midori.lnk" "${PRODUCT_EXE}"
CreateShortCut "$QUICKLAUNCH\Midori.lnk" "${PRODUCT_EXE}"
SectionEnd
Section "Default Browser" SEC05
SectionIn 1
StrCpy $DefaultBrowser "yes"
SectionEnd
Section -AdditionalIcons
SetOutPath $INSTDIR
!insertmacro MUI_STARTMENU_WRITE_BEGIN ${PRODUCT_NAME}
WriteIniStr "$INSTDIR\Website.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"
CreateShortCut "$SMPROGRAMS\$StartmenuFolder\Website.lnk" "${PRODUCT_EXE}" \
"${PRODUCT_WEB_SITE}" "${PRODUCT_EXE}"
CreateShortCut "$SMPROGRAMS\$StartmenuFolder\Uninstall.lnk" "${UNINSTALL_EXE}"
CreateShortCut "$SMPROGRAMS\$StartmenuFolder\Make Default.lnk" "${UNINSTALL_EXE}" \
"/S /MAKEDEFAULT" "${PRODUCT_EXE}"
!insertmacro MUI_STARTMENU_WRITE_END
SectionEnd
Section -Post
WriteUninstaller "${UNINSTALL_EXE}"
WriteRegStr SHCTX "${PRODUCT_DIR_REGKEY}" Path "$INSTDIR"
WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "StartMenu" "$SMPROGRAMS\$StartmenuFolder"
${if} $Answer == "yes" ; if user is admin
WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "UninstallString" "${UNINSTALL_EXE}"
WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "DisplayIcon" "${PRODUCT_EXE}"
WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "URLUpdateInfo" "${PRODUCT_WEB_SITE}"
WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
WriteRegDWORD SHCTX "${PRODUCT_UNINST_KEY}" "NoModify" 0x00000001
WriteRegDWORD SHCTX "${PRODUCT_UNINST_KEY}" "NoRepair" 0x00000001
WriteRegStr HKLM "${PRODUCT_BROWER_KEY}\MIDORI.EXE" "" "${PRODUCT_NAME}"
WriteRegStr HKLM "${PRODUCT_BROWER_KEY}\MIDORI.EXE\DefaultIcon" "" "${PRODUCT_EXE},0"
WriteRegStr HKLM "${PRODUCT_BROWER_KEY}\MIDORI.EXE\shell\open\command" "" "${PRODUCT_EXE}"
WriteRegStr HKLM "${PRODUCT_BROWER_KEY}\MIDORI.EXE\InstallInfo" "HideIconsCommand" '"${UNINSTALL_EXE}" /S /HIDE'
WriteRegDWORD HKLM "${PRODUCT_BROWER_KEY}\MIDORI.EXE\InstallInfo" "IconsVisible" 0x00000000
WriteRegStr HKLM "${PRODUCT_BROWER_KEY}\MIDORI.EXE\InstallInfo" "ReinstallCommand" '"${UNINSTALL_EXE}" /S /MAKEDEFAULT'
WriteRegStr HKLM "${PRODUCT_BROWER_KEY}\MIDORI.EXE\InstallInfo" "ShowIconsCommand" '"${UNINSTALL_EXE}" /S /SHOW'
${endif}
${if} $DefaultBrowser == "yes"
${if} $Answer == "yes" ; if user is admin
WriteRegDWORD HKLM "${PRODUCT_BROWER_KEY}\MIDORI.EXE\InstallInfo" "IconsVisible" 0x00000001
${endif}
WriteRegStr HKCU "${PRODUCT_BROWER_KEY}" "" "MIDORI.EXE"
WriteRegStr HKCR "http\DefaultIcon" "" "${PRODUCT_EXE},0"
WriteRegStr HKCR "http\shell\open\command" "" '${PRODUCT_EXE} "%1"'
WriteRegStr HKCR "https\DefaultIcon" "" "${PRODUCT_EXE},0"
WriteRegStr HKCR "https\shell\open\command" "" '${PRODUCT_EXE} "%1"'
${endif}
SectionEnd
Section Uninstall
Delete "$INSTDIR\Website.url"
Delete "${UNINSTALL_EXE}"
Delete "$INSTDIR\COPYING"
Delete "$INSTDIR\AUTHORS"
Delete "$INSTDIR\Midori.lnk"
; delete start menu entry
ReadRegStr $0 SHCTX "${PRODUCT_UNINST_KEY}" "StartMenu"
RMDir /r "$0"
Delete "$QUICKLAUNCH\Midori.lnk"
Delete "$DESKTOP\Midori.lnk"
RMDir /r "$INSTDIR\bin"
RMDir /r "$INSTDIR\etc"
RMDir /r "$INSTDIR\lib"
RMDir /r "$INSTDIR\share"
RMDir "$INSTDIR"
DeleteRegKey SHCTX "${PRODUCT_UNINST_KEY}"
DeleteRegKey HKCU "${PRODUCT_UNINST_KEY}"
DeleteRegKey SHCTX "${PRODUCT_DIR_REGKEY}"
DeleteRegKey HKCU "${PRODUCT_DIR_REGKEY}"
DeleteRegKey HKLM "${PRODUCT_BROWER_KEY}\MIDORI.EXE"
SetAutoClose true
SectionEnd
;;;;;;;;;;;;;;;;;;;;;;;;;
; Section descriptions ;
;;;;;;;;;;;;;;;;;;;;;;;;;
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${SEC01} "Required program files. You cannot skip these files."
!insertmacro MUI_DESCRIPTION_TEXT ${SEC02} "Various translations of Midori's interface."
!insertmacro MUI_DESCRIPTION_TEXT ${SEC03} "Create shortcuts for Midori on the desktop and in the Quicklaunch Bar"
!insertmacro MUI_DESCRIPTION_TEXT ${SEC04} "Available plugins like 'Advertisement Blocker', 'Form history filler' and 'Mouse Gestures'."
!insertmacro MUI_DESCRIPTION_TEXT ${SEC05} "Make Midori the default browser."
!insertmacro MUI_DESCRIPTION_TEXT ${SEC06} "User manual of the Midori application."
!insertmacro MUI_DESCRIPTION_TEXT ${SEC07} "Better looking icons from the ${ICON_THEME} icon theme."
!insertmacro MUI_FUNCTION_DESCRIPTION_END
;;;;;;;;;;;;;;;;;;;;;
; helper functions ;
;;;;;;;;;;;;;;;;;;;;;
; (from http://jabref.svn.sourceforge.net/viewvc/jabref/trunk/jabref/src/windows/nsis/setup.nsi)
!macro IsUserAdmin Result UName
ClearErrors
UserInfo::GetName
IfErrors Win9x
Pop $0
StrCpy ${UName} $0
UserInfo::GetAccountType
Pop $1
${if} $1 == "Admin"
StrCpy ${Result} "yes"
${else}
StrCpy ${Result} "no"
${endif}
Goto done
Win9x:
StrCpy ${Result} "yes"
done:
!macroend
; (from http://nsis.sourceforge.net/GetOptions)
Function un.GetOptions
!define GetOptions `!insertmacro GetOptionsCall`
!macro GetOptionsCall _PARAMETERS _OPTION _RESULT
Push `${_PARAMETERS}`
Push `${_OPTION}`
Call un.GetOptions
Pop ${_RESULT}
!macroend
Exch $1
Exch
Exch $0
Exch
Push $2
Push $3
Push $4
Push $5
Push $6
Push $7
ClearErrors
StrCpy $2 $1 '' 1
StrCpy $1 $1 1
StrLen $3 $2
StrCpy $7 0
begin:
StrCpy $4 -1
StrCpy $6 ''
quote:
IntOp $4 $4 + 1
StrCpy $5 $0 1 $4
StrCmp $5$7 '0' notfound
StrCmp $5 '' trimright
StrCmp $5 '"' 0 +7
StrCmp $6 '' 0 +3
StrCpy $6 '"'
goto quote
StrCmp $6 '"' 0 +3
StrCpy $6 ''
goto quote
StrCmp $5 `'` 0 +7
StrCmp $6 `` 0 +3
StrCpy $6 `'`
goto quote
StrCmp $6 `'` 0 +3
StrCpy $6 ``
goto quote
StrCmp $5 '`' 0 +7
StrCmp $6 '' 0 +3
StrCpy $6 '`'
goto quote
StrCmp $6 '`' 0 +3
StrCpy $6 ''
goto quote
StrCmp $6 '"' quote
StrCmp $6 `'` quote
StrCmp $6 '`' quote
StrCmp $5 $1 0 quote
StrCmp $7 0 trimleft trimright
trimleft:
IntOp $4 $4 + 1
StrCpy $5 $0 $3 $4
StrCmp $5 '' notfound
StrCmp $5 $2 0 quote
IntOp $4 $4 + $3
StrCpy $0 $0 '' $4
StrCpy $4 $0 1
StrCmp $4 ' ' 0 +3
StrCpy $0 $0 '' 1
goto -3
StrCpy $7 1
goto begin
trimright:
StrCpy $0 $0 $4
StrCpy $4 $0 1 -1
StrCmp $4 ' ' 0 +3
StrCpy $0 $0 -1
goto -3
StrCpy $3 $0 1
StrCpy $4 $0 1 -1
StrCmp $3 $4 0 end
StrCmp $3 '"' +3
StrCmp $3 `'` +2
StrCmp $3 '`' 0 end
StrCpy $0 $0 -1 1
goto end
notfound:
SetErrors
StrCpy $0 ''
end:
Pop $7
Pop $6
Pop $5
Pop $4
Pop $3
Pop $2
Pop $1
Exch $0
FunctionEnd
Function .onInit
StrCpy "$StartmenuFolder" "Midori"
; (from http://jabref.svn.sourceforge.net/viewvc/jabref/trunk/jabref/src/windows/nsis/setup.nsi)
; If the user does *not* have administrator privileges, abort
StrCpy $Answer ""
StrCpy $UserName ""
!insertmacro IsUserAdmin $Answer $UserName ; macro from LyXUtils.nsh
${if} $Answer == "yes"
SetShellVarContext all ; set that e.g. shortcuts will be created for all users
${else}
SetShellVarContext current
; TODO is this really what we want? $PROGRAMFILES is not much better because
; probably the unprivileged user can't write it anyways
StrCpy $INSTDIR "$PROFILE\$(^Name)"
${endif}
; prevent running multiple instances of the installer
System::Call 'kernel32::CreateMutexA(i 0, i 0, t "midori_installer") i .r1 ?e'
Pop $R0
StrCmp $R0 0 +3
MessageBox MB_OK|MB_ICONEXCLAMATION "The installer is already running." /SD IDOK
Abort
; warn about a new install over an existing installation
ReadRegStr $R0 SHCTX "${PRODUCT_UNINST_KEY}" "UninstallString"
StrCmp $R0 "" finish
MessageBox MB_YESNO|MB_ICONEXCLAMATION \
"Midori has already been installed. $\nDo you want to remove the previous version before installing $(^Name) ?" \
/SD IDYES IDYES remove IDNO finish
remove:
; run the uninstaller
ClearErrors
; we read the installation path of the old installation from the Registry
ReadRegStr $UNINSTDIR SHCTX "${PRODUCT_DIR_REGKEY}" "Path"
IfSilent dosilent nonsilent
dosilent:
ExecWait '$R0 /S _?=$UNINSTDIR' ;Do not copy the uninstaller to a temp file
Goto finish
nonsilent:
ExecWait '$R0 _?=$UNINSTDIR' ;Do not copy the uninstaller to a temp file
finish:
FunctionEnd
Function un.onInit
StrCpy $Answer ""
!insertmacro IsUserAdmin $Answer $UserName
${if} $Answer == "yes"
SetShellVarContext all
${else}
SetShellVarContext current
${endif}
${GetOptions} "$CMDLINE" "/MAKEDEFAULT" $0
IfErrors 0 +2
goto makedefault_next
WriteRegStr HKCU "${PRODUCT_BROWER_KEY}" "" "MIDORI.EXE"
WriteRegStr HKCR "http\DefaultIcon" "" "${PRODUCT_EXE},0"
WriteRegStr HKCR "http\shell\open\command" "" '${PRODUCT_EXE} "%1"'
WriteRegStr HKCR "https\DefaultIcon" "" "${PRODUCT_EXE},0"
WriteRegStr HKCR "https\shell\open\command" "" '${PRODUCT_EXE} "%1"'
Abort
makedefault_next:
${GetOptions} "$CMDLINE" "/SHOW" $0
IfErrors 0 +2
goto show_next
${if} $Answer == "yes" ; if user is admin
WriteRegDWORD HKLM "${PRODUCT_BROWER_KEY}\MIDORI.EXE\InstallInfo" "IconsVisible" 0x00000001
${endif}
CreateShortCut "$DESKTOP\Midori.lnk" "${PRODUCT_EXE}"
CreateShortCut "$QUICKLAUNCH\Midori.lnk" "${PRODUCT_EXE}"
Abort
show_next:
${GetOptions} "$CMDLINE" "/HIDE" $0
IfErrors 0 +2
goto hide_next
${if} $Answer == "yes" ; if user is admin
WriteRegDWORD HKLM "${PRODUCT_BROWER_KEY}\MIDORI.EXE\InstallInfo" "IconsVisible" 0x00000000
${endif}
Delete "$QUICKLAUNCH\Midori.lnk"
Delete "$DESKTOP\Midori.lnk"
Abort
hide_next:
; If the user does *not* have administrator privileges, abort
${if} $Answer != "yes"
; check if the Midori has been installed with admin permisions
ReadRegStr $0 HKLM "${PRODUCT_UNINST_KEY}" "Publisher"
${if} $0 != ""
MessageBox MB_OK|MB_ICONSTOP "You need administrator privileges to uninstall Midori!" \
/SD IDOK
Abort
${endif}
${endif}
FunctionEnd
Function OnDirLeave
ClearErrors
SetOutPath "$INSTDIR" ; what about IfError creating $INSTDIR?
GetTempFileName $1 "$INSTDIR" ; creates tmp file (or fails)
FileOpen $0 "$1" "w" ; error to open?
FileWriteByte $0 "0"
IfErrors notPossible possible
notPossible:
RMDir "$INSTDIR" ; removes folder if empty
MessageBox MB_OK "The given directory is not writeable. Please choose another one!" /SD IDOK
Abort
possible:
FileClose $0
Delete "$1"
FunctionEnd