; ####################################### ; Inkscape NSIS installer project file ; Used as of 0.40 ; ####################################### ; ####################################### ; DEFINES ; ####################################### !define PRODUCT_NAME "Inkscape" !define PRODUCT_VERSION "0.45+devel" !define PRODUCT_PUBLISHER "Inkscape Organization" !define PRODUCT_WEB_SITE "http://www.inkscape.org" !define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\inkscape.exe" !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" ; ####################################### ; MUI SETTINGS ; ####################################### ; MUI 1.67 compatible ------ SetCompressor /SOLID lzma !include "MUI.nsh" !include "sections.nsh" !define MUI_ABORTWARNING !define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico" !define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico" !define MUI_HEADERIMAGE !define MUI_HEADERIMAGE_BITMAP "header.bmp" !define MUI_COMPONENTSPAGE_SMALLDESC ; Welcome page !insertmacro MUI_PAGE_WELCOME ; License page ; !define MUI_LICENSEPAGE_RADIOBUTTONS LicenseForceSelection off !define MUI_LICENSEPAGE_BUTTON $(lng_LICENSE_BUTTON) !define MUI_LICENSEPAGE_TEXT_BOTTOM $(lng_LICENSE_BOTTOM_TEXT) !insertmacro MUI_PAGE_LICENSE "..\..\Copying" !insertmacro MUI_PAGE_COMPONENTS ; InstType $(lng_Full) ; InstType $(lng_Optimal) ; InstType $(lng_Minimal) ; Directory page !insertmacro MUI_PAGE_DIRECTORY ; Instfiles page !insertmacro MUI_PAGE_INSTFILES ; Finish page !define MUI_FINISHPAGE_RUN "$INSTDIR\inkscape.exe" !insertmacro MUI_PAGE_FINISH ; Uninstaller pages !insertmacro MUI_UNPAGE_CONFIRM UninstPage custom un.CustomPageUninstall !insertmacro MUI_UNPAGE_INSTFILES ShowUninstDetails hide !insertmacro MUI_UNPAGE_FINISH ; ####################################### ; STRING LOCALIZATION ; ####################################### ; Thanks to Adib Taraben and Luca Bruno for getting this started ; Add your translation here! :-) ; I had wanted to list the languages alphabetically, but apparently ; the first is the default. So putting English first is just being ; practical. It is not chauvinism or hubris, I swear! ;-) ; default language first ; Language files !include "english.nsh" ; !include "catalan.nsh" the catalan support has been abandoned by NSIS as of version 2.28 !include "czech.nsh" !include "finnish.nsh" !include "french.nsh" !include "german.nsh" !include "italian.nsh" !include "japanese.nsh" !include "polish.nsh" !include "russian.nsh" !include "slovak.nsh" !include "slovenian.nsh" !include "spanish.nsh" ReserveFile "inkscape.nsi.uninstall" ; ####################################### ; SETTINGS ; ####################################### Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" Caption $(lng_Caption) OutFile "Inkscape-${PRODUCT_VERSION}-1.win32.exe" InstallDir "$PROGRAMFILES\Inkscape" InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" "" ShowInstDetails hide ShowUnInstDetails hide var askMultiUser Var MultiUser var User ; ####################################### ; I N S T A L L E R S E C T I O N S ; ####################################### ; Turn off old selected section ; GetWindowsVersion ; ; Based on Yazno's function, http://yazno.tripod.com/powerpimpit/ ; Updated by Joost Verburg ; Updated for Windows 98 SE by Matthew Win Tibbals 5-21-03 ; ; Returns on top of stack ; ; Windows Version (95, 98, ME, NT x.x, 2000, XP, 2003) ; or ; '' (Unknown Windows Version) ; ; Usage: ; Call GetWindowsVersion ; Pop $R0 ; ; at this point $R0 is "NT 4.0" or whatnot ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Function GetWindowsVersion Push $R0 Push $R1 ClearErrors ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion IfErrors 0 lbl_winnt ; we are not NT ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion" VersionNumber StrCpy $R1 $R0 1 StrCmp $R1 '4' 0 lbl_error StrCpy $R1 $R0 3 StrCmp $R1 '4.0' lbl_win32_95 StrCmp $R1 '4.9' lbl_win32_ME lbl_win32_98 lbl_win32_95: StrCpy $R0 '95' StrCpy $AskMultiUser "0" Goto lbl_done lbl_win32_98: StrCpy $R0 '98' StrCpy $AskMultiUser "0" Goto lbl_done lbl_win32_ME: StrCpy $R0 'ME' StrCpy $AskMultiUser "0" Goto lbl_done lbl_winnt: StrCpy $R1 $R0 1 StrCmp $R1 '3' lbl_winnt_x StrCmp $R1 '4' lbl_winnt_x StrCpy $R1 $R0 3 StrCmp $R1 '5.0' lbl_winnt_2000 StrCmp $R1 '5.1' lbl_winnt_XP StrCmp $R1 '5.2' lbl_winnt_2003 lbl_error lbl_winnt_x: StrCpy $R0 "NT $R0" 6 Goto lbl_done lbl_winnt_2000: Strcpy $R0 '2000' Goto lbl_done lbl_winnt_XP: Strcpy $R0 'XP' Goto lbl_done lbl_winnt_2003: Strcpy $R0 '2003' Goto lbl_done lbl_error: Strcpy $R0 '' lbl_done: Pop $R1 Exch $R0 FunctionEnd ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; StrStr ; input, top of stack = string to search for ; top of stack-1 = string to search in ; output, top of stack (replaces with the portion of the string remaining) ; modifies no other variables. ; ; Usage: ; Push "this is a long ass string" ; Push "ass" ; Call StrStr ; Pop $R0 ; ($R0 at this point is "ass string") Function StrStr Exch $R1 ; st=haystack,old$R1, $R1=needle Exch ; st=old$R1,haystack Exch $R2 ; st=old$R1,old$R2, $R2=haystack Push $R3 Push $R4 Push $R5 StrLen $R3 $R1 StrCpy $R4 0 ; $R1=needle ; $R2=haystack ; $R3=len(needle) ; $R4=cnt ; $R5=tmp loop: StrCpy $R5 $R2 $R3 $R4 StrCmp $R5 $R1 done StrCmp $R5 "" done IntOp $R4 $R4 + 1 Goto loop done: StrCpy $R1 $R2 "" $R4 Pop $R5 Pop $R4 Pop $R3 Pop $R2 Exch $R1 FunctionEnd ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; GetParameters ; input, none ; output, top of stack (replaces, with e.g. whatever) ; modifies no other variables. Function GetParameters Push $R0 Push $R1 Push $R2 Push $R3 StrCpy $R2 1 StrLen $R3 $CMDLINE ;Check for quote or space StrCpy $R0 $CMDLINE $R2 StrCmp $R0 '"' 0 +3 StrCpy $R1 '"' Goto loop StrCpy $R1 " " loop: IntOp $R2 $R2 + 1 StrCpy $R0 $CMDLINE 1 $R2 StrCmp $R0 $R1 get StrCmp $R2 $R3 get Goto loop get: IntOp $R2 $R2 + 1 StrCpy $R0 $CMDLINE 1 $R2 StrCmp $R0 " " get StrCpy $R0 $CMDLINE "" $R2 Pop $R3 Pop $R2 Pop $R1 Exch $R0 FunctionEnd ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; GetParameterValue ; Chris Morgan 5/10/2004 ; -Updated 4/7/2005 to add support for retrieving a command line switch ; and additional documentation ; ; Searches the command line input, retrieved using GetParameters, for the ; value of an option given the option name. If no option is found the ; default value is placed on the top of the stack upon function return. ; ; This function can also be used to detect the existence of just a ; command line switch like /OUTPUT Pass the default and "OUTPUT" ; on the stack like normal. An empty return string "" will indicate ; that the switch was found, the default value indicates that ; neither a parameter or switch was found. ; ; Inputs - Top of stack is default if parameter isn't found, ; second in stack is parameter to search for, ex. "OUTPUT" ; Outputs - Top of the stack contains the value of this parameter ; So if the command line contained /OUTPUT=somedirectory, "somedirectory" ; will be on the top of the stack when this function returns ; ; Register usage ;$R0 - default return value if the parameter isn't found ;$R1 - input parameter, for example OUTPUT from the above example ;$R2 - the length of the search, this is the search parameter+2 ; as we have '/OUTPUT=' ;$R3 - the command line string ;$R4 - result from StrStr calls ;$R5 - search for ' ' or '"' Function GetParameterValue Exch $R0 ; get the top of the stack(default parameter) into R0 Exch ; exchange the top of the stack(default) with ; the second in the stack(parameter to search for) Exch $R1 ; get the top of the stack(search parameter) into $R1 ;Preserve on the stack the registers used in this function Push $R2 Push $R3 Push $R4 Push $R5 Strlen $R2 $R1+2 ; store the length of the search string into R2 Call GetParameters ; get the command line parameters Pop $R3 ; store the command line string in R3 # search for quoted search string StrCpy $R5 '"' ; later on we want to search for a open quote Push $R3 ; push the 'search in' string onto the stack Push '"/$R1=' ; push the 'search for' Call StrStr ; search for the quoted parameter value Pop $R4 StrCpy $R4 $R4 "" 1 ; skip over open quote character, "" means no maxlen StrCmp $R4 "" "" next ; if we didn't find an empty string go to next # search for non-quoted search string StrCpy $R5 ' ' ; later on we want to search for a space since we ; didn't start with an open quote '"' we shouldn't ; look for a close quote '"' Push $R3 ; push the command line back on the stack for searching Push '/$R1=' ; search for the non-quoted search string Call StrStr Pop $R4 ; $R4 now contains the parameter string starting at the search string, ; if it was found next: StrCmp $R4 "" check_for_switch ; if we didn't find anything then look for ; usage as a command line switch # copy the value after /$R1= by using StrCpy with an offset of $R2, # the length of '/OUTPUT=' StrCpy $R0 $R4 "" $R2 ; copy commandline text beyond parameter into $R0 # search for the next parameter so we can trim this extra text off Push $R0 Push $R5 ; search for either the first space ' ', or the first ; quote '"' ; if we found '"/output' then we want to find the ; ending ", as in '"/output=somevalue"' ; if we found '/output' then we want to find the first ; space after '/output=somevalue' Call StrStr ; search for the next parameter Pop $R4 StrCmp $R4 "" done ; if 'somevalue' is missing, we are done StrLen $R4 $R4 ; get the length of 'somevalue' so we can copy this ; text into our output buffer StrCpy $R0 $R0 -$R4 ; using the length of the string beyond the value, ; copy only the value into $R0 goto done ; if we are in the parameter retrieval path skip over ; the check for a command line switch ; See if the parameter was specified as a command line switch, like '/output' check_for_switch: Push $R3 ; push the command line back on the stack for searching Push '/$R1' ; search for the non-quoted search string Call StrStr Pop $R4 StrCmp $R4 "" done ; if we didn't find anything then use the default StrCpy $R0 "" ; otherwise copy in an empty string since we found the ; parameter, just didn't find a value done: Pop $R5 Pop $R4 Pop $R3 Pop $R2 Pop $R1 Exch $R0 ; put the value in $R0 at the top of the stack FunctionEnd ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; !macro Language polng lng SectionIn 1 2 3 SetOutPath $INSTDIR File /nonfatal /a "..\..\inkscape\*.${lng}.txt" SetOutPath $INSTDIR\locale File /nonfatal /a /r "..\..\inkscape\locale\${polng}" SetOutPath $INSTDIR\lib\locale File /nonfatal /a /r "..\..\inkscape\lib\locale\${polng}" SetOutPath $INSTDIR\share\clipart File /nonfatal /a /r "..\..\inkscape\share\clipart\*.${polng}.svg" ; the keyboard tables SetOutPath $INSTDIR\share\screens File /nonfatal /a /r "..\..\inkscape\share\screens\*.${polng}.svg" SetOutPath $INSTDIR\share\templates File /nonfatal /a /r "..\..\inkscape\share\templates\*.${polng}.svg" SetOutPath $INSTDIR\doc File /nonfatal /a /r "..\..\inkscape\doc\keys.${polng}.xml" File /nonfatal /a /r "..\..\inkscape\doc\keys.${polng}.html" SectionGetFlags ${SecTutorials} $R1 IntOp $R1 $R1 & ${SF_SELECTED} IntCmp $R1 ${SF_SELECTED} 0 skip_tutorials SetOutPath $INSTDIR\share\tutorials File /nonfatal /a "..\..\inkscape\share\tutorials\*.${polng}.*" skip_tutorials: !macroend ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;; ; Delete prefs ; code taken from the vlc project ;;;;;;;;;;;;;;;;;;;;;;;;;; !macro delprefs StrCpy $0 0 DetailPrint "Delete personal preferences ..." DetailPrint "try to find all users ..." delprefs-Loop: ; FIXME ; this will loop through all the logged users and "virtual" windows users ; (it looks like users are only present in HKEY_USERS when they are logged in) ClearErrors EnumRegKey $1 HKU "" $0 StrCmp $1 "" delprefs-End IntOp $0 $0 + 1 ReadRegStr $2 HKU "$1\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" AppData StrCmp $2 "" delprefs-Loop DetailPrint "$2\Inkscape will be removed" RMDir /r "$2\Inkscape" Goto delprefs-Loop delprefs-End: !macroend ;-------------------------------- ; Installer Sections ; @todo better idea is to call the original uninstaller first Section -removeInkscape ; check for an old installation and clean that dlls and stuff ClearErrors IfFileExists $INSTDIR\etc 0 doDeleteLib DetailPrint "$INSTDIR\etc exists, will be removed" RmDir /r $INSTDIR\etc IfErrors 0 +4 DetailPrint "fatal: failed to delete $INSTDIR\etc" DetailPrint "aborting installation" Abort doDeleteLib: ClearErrors IfFileExists $INSTDIR\lib 0 doDeleteLocale DetailPrint "$INSTDIR\lib exists, will be removed" RmDir /r $INSTDIR\lib IfErrors 0 +4 DetailPrint "fatal: failed to delete $INSTDIR\lib" DetailPrint "aborting installation" Abort doDeleteLocale: ClearErrors IfFileExists $INSTDIR\locale 0 doDeleteDll DetailPrint "$INSTDIR\locale exists, will be removed" RmDir /r $INSTDIR\locale IfErrors 0 +4 DetailPrint "fatal: failed to delete $INSTDIR\locale" DetailPrint "aborting installation" Abort doDeleteDll: ClearErrors FindFirst $0 $1 $INSTDIR\*.dll FindNextLoop: StrCmp $1 "" FindNextDone DetailPrint "$INSTDIR\$1 exists, will be removed" Delete $INSTDIR\$1 IfErrors 0 +4 DetailPrint "fatal: failed to delete $INSTDIR\$1" DetailPrint "aborting installation" Abort FindNext $0 $1 Goto FindNextLoop FindNextDone: ;remove the old inkscape shortcuts from the startmenu ;just in case they are still there SetShellVarContext current Delete "$SMPROGRAMS\Inkscape\Uninstall Inkscape.lnk" Delete "$SMPROGRAMS\Inkscape\Inkscape.lnk" RMDir "$SMPROGRAMS\Inkscape" Delete "$SMPROGRAMS\Inkscape.lnk" SetShellVarContext all Delete "$SMPROGRAMS\Inkscape\Uninstall Inkscape.lnk" Delete "$SMPROGRAMS\Inkscape\Inkscape.lnk" RMDir "$SMPROGRAMS\Inkscape" Delete "$SMPROGRAMS\Inkscape.lnk" SectionEnd Section $(lng_Core) SecCore DetailPrint "Installing Inkscape Core Files ..." SectionIn 1 2 3 RO SetOutPath $INSTDIR SetOverwrite on SetAutoClose false File /a "..\..\inkscape\ink*.exe" File /a "..\..\inkscape\AUTHORS" File /a "..\..\inkscape\COPYING" File /a "..\..\inkscape\COPYING.LIB" File /a "..\..\inkscape\NEWS" File /nonfatal /a "..\..\inkscape\HACKING.txt" File /a "..\..\inkscape\README" File /nonfatal /a "..\..\inkscape\README.txt" File /a "..\..\inkscape\TRANSLATORS" File /nonfatal /a /r "..\..\inkscape\data" File /nonfatal /a /r "..\..\inkscape\doc" File /nonfatal /a /r "..\..\inkscape\plugins" File /nonfatal /a /r /x *.??*.???* /x "examples" /x "tutorials" "..\..\inkscape\share" ; this files are added because it slips through the filter SetOutPath $INSTDIR\share\clipart File /a "..\..\inkscape\share\clipart\inkscape.logo.svg" ;File /a "..\..\inkscape\share\clipart\inkscape.logo.classic.svg" SetOutPath $INSTDIR\share\extensions File /a "..\..\inkscape\share\extensions\pdf_output.inx.txt" File /a "..\..\inkscape\share\extensions\pdf_output_via_gs_on_win32.inx.txt" SetOutPath $INSTDIR\share\icons File /a "..\..\inkscape\share\icons\inkscape.file.png" File /a "..\..\inkscape\share\icons\inkscape.file.svg" SetOutPath $INSTDIR\modules File /nonfatal /a /r "..\..\inkscape\modules\*.*" SetOutPath $INSTDIR\python File /nonfatal /a /r "..\..\inkscape\python\*.*" SectionEnd Section $(lng_GTKFiles) SecGTK DetailPrint "Installing GTK Files ..." SectionIn 1 2 3 RO SetOutPath $INSTDIR SetOverwrite on File /a /r "..\..\inkscape\*.dll" File /a /r /x "locale" "..\..\inkscape\lib" File /a /r "..\..\inkscape\etc" SectionEnd Section $(lng_Alluser) SecAlluser ; disable this option in Win95/Win98/WinME SectionIn 1 2 3 StrCpy $MultiUser "1" StrCmp $MultiUser "1" "" SingleUser DetailPrint "admin mode, registry root will be HKLM" SetShellVarContext all Goto endSingleUser SingleUser: DetailPrint "single user mode, registry root will be HKCU" SetShellVarContext current endSingleUser: SectionEnd SectionGroup $(lng_Shortcuts) SecShortcuts Section /o $(lng_Desktop) SecDesktop ClearErrors CreateShortCut "$DESKTOP\Inkscape.lnk" "$INSTDIR\inkscape.exe" IfErrors 0 +2 DetailPrint "Uups! Problems creating desktop shortcuts" SectionEnd Section /o $(lng_Quicklaunch) SecQuicklaunch ClearErrors StrCmp $QUICKLAUNCH $TEMP +2 CreateShortCut "$QUICKLAUNCH\Inkscape.lnk" "$INSTDIR\inkscape.exe" IfErrors 0 +2 DetailPrint "Uups! Problems creating quicklaunch shortcuts" SectionEnd Section $(lng_SVGWriter) SecSVGWriter SectionIn 1 2 3 ; create file associations, test before if needed DetailPrint "creating file associations" ClearErrors ReadRegStr $0 HKCR ".svg" "" StrCmp $0 "" 0 +3 WriteRegStr HKCR ".svg" "" "svgfile" WriteRegStr HKCR "svgfile" "" "Scalable Vector Graphics file" ReadRegStr $0 HKCR ".svgz" "" StrCmp $0 "" 0 +3 WriteRegStr HKCR ".svgz" "" "svgfile" WriteRegStr HKCR "svgfile" "" "Scalable Vector Graphics file" IfErrors 0 +2 DetailPrint "Uups! Problems creating file assoziations for svg writer" DetailPrint "creating default editor" ClearErrors ReadRegStr $0 HKCR ".svg" "" WriteRegStr HKCR "$0\shell\edit\command" "" '"$INSTDIR\Inkscape.exe" "%1"' ReadRegStr $0 HKCR ".svgz" "" WriteRegStr HKCR "$0\shell\edit\command" "" '"$INSTDIR\Inkscape.exe" "%1"' IfErrors 0 +2 DetailPrint "Uups! Problems creating default editor" SectionEnd Section $(lng_ContextMenu) SecContextMenu SectionIn 1 2 3 ; create file associations, test before if needed DetailPrint "creating file associations" ClearErrors ReadRegStr $0 HKCR ".svg" "" StrCmp $0 "" 0 +3 WriteRegStr HKCR ".svg" "" "svgfile" WriteRegStr HKCR "svgfile" "" "Scalable Vector Graphics file" ReadRegStr $0 HKCR ".svgz" "" StrCmp $0 "" 0 +3 WriteRegStr HKCR ".svgz" "" "svgfile" WriteRegStr HKCR "svgfile" "" "Scalable Vector Graphics file" IfErrors 0 +2 DetailPrint "Uups! Problems creating file assoziations for context menu" DetailPrint "creating context menue" ClearErrors ReadRegStr $0 HKCR ".svg" "" WriteRegStr HKCR "$0\shell\${PRODUCT_NAME}\command" "" '"$INSTDIR\Inkscape.exe" "%1"' ReadRegStr $0 HKCR ".svgz" "" WriteRegStr HKCR "$0\shell\${PRODUCT_NAME}\command" "" '"$INSTDIR\Inkscape.exe" "%1"' IfErrors 0 +2 DetailPrint "Uups! Problems creating context menue integration" SectionEnd SectionGroupEnd Section /o $(lng_DeletePrefs) SecPrefs !insertmacro delprefs SectionEnd SectionGroup $(lng_Addfiles) SecAddfiles Section $(lng_Examples) SecExamples SectionIn 1 2 SetOutPath $INSTDIR\share File /nonfatal /a /r /x "*.??*.???*" "..\..\inkscape\share\examples" SectionEnd Section $(lng_Tutorials) SecTutorials SectionIn 1 2 SetOutPath $INSTDIR\share File /nonfatal /a /r /x "*.??*.???*" "..\..\inkscape\share\tutorials" SectionEnd SectionGroupEnd SectionGroup /e $(lng_Languages) SecLanguages Section $(lng_am) SecAmharic !insertmacro Language am am SectionEnd Section $(lng_az) SecAzerbaijani !insertmacro Language az az SectionEnd Section $(lng_be) SecByelorussian !insertmacro Language be be SectionEnd Section $(lng_bg) SecBulgarian !insertmacro Language bg bg SectionEnd Section $(lng_bn) SecBengali !insertmacro Language bn bn SectionEnd Section $(lng_ca) SecCatalan !insertmacro Language ca ca SectionEnd Section $(lng_cs) SecCzech !insertmacro Language cs cs SectionEnd Section $(lng_da) SecDanish !insertmacro Language da da SectionEnd Section $(lng_de) SecGerman !insertmacro Language 'de' 'de' SectionEnd Section $(lng_dz) SecDzongkha !insertmacro Language dz dz SectionEnd Section $(lng_el) SecGreek !insertmacro Language el el SectionEnd Section $(lng_en) SecEnglish SectionIn 1 2 3 RO SectionEnd Section $(lng_en_AU) SecEnglishAustralian !insertmacro Language en_AU en_AU SectionEnd Section $(lng_en_CA) SecEnglishCanadian !insertmacro Language en_CA en_CA SectionEnd Section $(lng_en_GB) SecEnglishBritain !insertmacro Language en_GB en_GB SectionEnd Section $(lng_en_US@piglatin) SecEnglishPiglatin !insertmacro Language en_US@piglatin en_US@Piglatin SectionEnd Section $(lng_eo) SecEsperanto !insertmacro Language eo eo SectionEnd Section $(lng_es) SecSpanish !insertmacro Language 'es' 'es' SectionEnd Section $(lng_es_MX) SecSpanishMexico !insertmacro Language 'es_MX' 'es_MX' SectionEnd Section $(lng_et) SecEstonian !insertmacro Language et et SectionEnd Section $(lng_eu) SecBasque !insertmacro Language eu eu SectionEnd Section $(lng_fr) SecFrench !insertmacro Language 'fr' 'fr' SectionEnd Section $(lng_fi) SecFinnish !insertmacro Language 'fi' 'fi' SectionEnd Section $(lng_ga) SecIrish !insertmacro Language ga ga SectionEnd Section $(lng_gl) SecGallegan !insertmacro Language gl gl SectionIn 1 2 3 SectionEnd Section $(lng_he) SecHebrew !insertmacro Language he he SectionIn 1 2 3 SectionEnd Section $(lng_hr) SecCroatian !insertmacro Language hr hr SectionIn 1 2 3 SectionEnd Section $(lng_hu) SecHungarian !insertmacro Language hu hu SectionIn 1 2 3 SectionEnd Section $(lng_id) SecIndonesian !insertmacro Language id id SectionIn 1 2 3 SectionEnd Section $(lng_it) SecItalian !insertmacro Language it it SectionIn 1 2 3 SectionEnd Section $(lng_ja) SecJapanese !insertmacro Language 'ja' 'jp' SectionEnd Section $(lng_km) SecKhmer !insertmacro Language km km SectionEnd Section $(lng_ko) SecKorean !insertmacro Language 'ko' 'ko' SectionEnd Section $(lng_lt) SecLithuanian !insertmacro Language 'lt' 'lt' SectionEnd Section $(lng_mn) SecMongolian !insertmacro Language mn mn SectionEnd Section $(lng_mk) SecMacedonian !insertmacro Language mk mk SectionEnd Section $(lng_nb) SecNorwegianBokmal !insertmacro Language nb nb SectionEnd Section $(lng_ne) SecNepali !insertmacro Language ne ne SectionEnd Section $(lng_nl) SecDutch !insertmacro Language nl nl SectionEnd Section $(lng_nn) SecNorwegianNynorsk !insertmacro Language nn nn SectionEnd Section $(lng_pa) SecPanjabi !insertmacro Language pa pa SectionEnd Section $(lng_pl) SecPolish !insertmacro Language pl pl SectionEnd Section $(lng_pt) SecPortuguese !insertmacro Language pt pt SectionEnd Section $(lng_pt_BR) SecPortugueseBrazil !insertmacro Language pt_BR pt_BR SectionEnd Section $(lng_ro) SecRomanian !insertmacro Language ro ro SectionEnd Section $(lng_ru) SecRussian !insertmacro Language ru ru SectionEnd Section $(lng_rw) SecKinyarwanda !insertmacro Language rw rw SectionEnd Section $(lng_sk) SecSlovak !insertmacro Language sk sk SectionEnd Section $(lng_sl) SecSlovenian !insertmacro Language sl sl SectionEnd Section $(lng_sq) SecAlbanian !insertmacro Language sq sq SectionEnd Section $(lng_sr) SecSerbian !insertmacro Language sr sr SectionEnd Section $(lng_sr@Latn) SecSerbianLatin !insertmacro Language 'sr@Latn' 'sr@Latn' SectionEnd Section $(lng_sv) SecSwedish !insertmacro Language sv sv SectionEnd Section $(lng_th) SecThai !insertmacro Language th th SectionEnd Section $(lng_tr) SecTurkish !insertmacro Language tr tr SectionEnd Section $(lng_uk) SecUkrainian !insertmacro Language uk uk SectionEnd Section $(lng_vi) SecVietnamese !insertmacro Language vi vi SectionEnd Section $(lng_zh_CN) SecChineseSimplified !insertmacro Language zh_CN zh_CN SectionEnd Section $(lng_zh_TW) SecChineseTaiwan !insertmacro Language zh_TW zh_TW SectionEnd SectionGroupEnd Section -FinalizeInstallation StrCmp $MultiUser "1" "" SingleUser DetailPrint "admin mode, registry root will be HKLM" SetShellVarContext all Goto endSingleUser SingleUser: DetailPrint "single user mode, registry root will be HKCU" SetShellVarContext current endSingleUser: ; check for writing registry ClearErrors WriteRegStr SHCTX "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\inkscape.exe" ;IfErrors 0 +4 ; DetailPrint "fatal: failed to write to ${PRODUCT_DIR_REGKEY}" ; DetailPrint "aborting installation" ; Abort WriteRegStr SHCTX "${PRODUCT_DIR_REGKEY}" "MultiUser" "$MultiUser" WriteRegStr SHCTX "${PRODUCT_DIR_REGKEY}" "askMultiUser" "$askMultiUser" WriteRegStr SHCTX "${PRODUCT_DIR_REGKEY}" "User" "$User" IfErrors 0 +2 DetailPrint "fatal: failed to write to registry installation info" ; start menu entries ClearErrors CreateShortCut "$SMPROGRAMS\Inkscape.lnk" "$INSTDIR\inkscape.exe" IfErrors 0 +2 DetailPrint "fatal: failed to write to start menu info" ; uninstall settings ClearErrors WriteUninstaller "$INSTDIR\uninst.exe" WriteRegExpandStr SHCTX "${PRODUCT_UNINST_KEY}" "UninstallString" '"$INSTDIR\uninst.exe"' WriteRegExpandStr SHCTX "${PRODUCT_UNINST_KEY}" "InstallLocation" "$INSTDIR" WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "DisplayName" "${PRODUCT_NAME} ${PRODUCT_VERSION}" WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\Inkscape.exe,0" WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}" WriteRegDWORD SHCTX "${PRODUCT_UNINST_KEY}" "NoModify" "1" WriteRegDWORD SHCTX "${PRODUCT_UNINST_KEY}" "NoRepair" "1" IfErrors 0 +2 DetailPrint "fatal: failed to write to registry un-installation info" SectionEnd ; Last the Descriptions !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${SecCore} $(lng_CoreDesc) !insertmacro MUI_DESCRIPTION_TEXT ${SecGTK} $(lng_GTKFilesDesc) !insertmacro MUI_DESCRIPTION_TEXT ${SecShortcuts} $(lng_ShortcutsDesc) !insertmacro MUI_DESCRIPTION_TEXT ${SecAlluser} $(lng_AlluserDesc) !insertmacro MUI_DESCRIPTION_TEXT ${SecDesktop} $(lng_DesktopDesc) !insertmacro MUI_DESCRIPTION_TEXT ${SecQuicklaunch} $(lng_QuicklaunchDesc) !insertmacro MUI_DESCRIPTION_TEXT ${SecSVGWriter} $(lng_SVGWriterDesc) !insertmacro MUI_DESCRIPTION_TEXT ${SecContextMenu} $(lng_ContextMenuDesc) !insertmacro MUI_DESCRIPTION_TEXT ${SecPrefs} $(lng_DeletePrefsDesc) !insertmacro MUI_DESCRIPTION_TEXT ${SecAddfiles} $(lng_AddfilesDesc) !insertmacro MUI_DESCRIPTION_TEXT ${SecExamples} $(lng_ExamplesDesc) !insertmacro MUI_DESCRIPTION_TEXT ${SecTutorials} $(lng_TutorialsDesc) !insertmacro MUI_DESCRIPTION_TEXT ${SecLanguages} $(lng_LanguagesDesc) !insertmacro MUI_FUNCTION_DESCRIPTION_END !macro Parameter key Section Push ${key} Push "" Call GetParameterValue Pop $1 StrCmp $1 "OFF" 0 +5 SectionGetFlags ${Section} $0 IntOp $2 ${SF_SELECTED} ~ IntOp $0 $0 & $2 SectionSetFlags ${Section} $0 StrCmp $1 "ON" 0 +4 SectionGetFlags ${Section} $0 IntOp $0 $0 | ${SF_SELECTED} SectionSetFlags ${Section} $0 !macroend Function .onInit ;Extract InstallOptions INI files StrCpy $AskMultiUser "1" StrCpy $MultiUser "0" ; this resets AskMultiUser if Win95/98/ME Call GetWindowsVersion Pop $R0 DetailPrint "detected operating system $R0" ;MessageBox MB_OK "operating system: $R0; AskMultiuser: $AskMultiUser" ; hide all user section if win98 StrCmp $AskMultiUser "1" +2 SectionSetText ${SecAlluser} "" ; hide if quick launch if not available StrCmp $QUICKLAUNCH $TEMP 0 +2 SectionSetText ${SecQuicklaunch} "" ;check if user is admin ClearErrors UserInfo::GetName IfErrors info_Win9x Pop $0 StrCpy $User $0 UserInfo::GetAccountType Pop $1 StrCmp $1 "Admin" info_done MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "$(lng_NO_ADMIN)$(lng_OK_CANCEL_DESC)" /SD IDOK IDOK info_done IDCANCEL +1 Quit Goto info_done info_Win9x: # This one means you don't need to care about admin or # not admin because Windows 9x doesn't either MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "$(lng_NOT_SUPPORTED)$(lng_OK_CANCEL_DESC)" /SD IDOK IDOK info_done IDCANCEL +1 Quit info_done: ;check for previous installation ReadRegStr $0 HKLM "${PRODUCT_DIR_REGKEY}" "User" StrCmp $0 "" +1 +2 ReadRegStr $0 HKCU "${PRODUCT_DIR_REGKEY}" "User" ;check user if applicable StrCmp $0 "" diff_user_install_done StrCmp $0 $User diff_user_install_done MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "$(lng_DIFFERENT_USER)$(lng_OK_CANCEL_DESC)" /SD IDOK IDOK diff_user_install_done IDCANCEL +1 Quit diff_user_install_done: ; call uninstall first ; code taken from the vlc project ReadRegStr $R0 HKLM ${PRODUCT_UNINST_KEY} "UninstallString" ReadRegStr $R1 HKLM ${PRODUCT_UNINST_KEY} "DisplayName" StrCmp $R0 "" +1 +3 ReadRegStr $R0 HKCU ${PRODUCT_UNINST_KEY} "UninstallString" ReadRegStr $R1 HKCU ${PRODUCT_UNINST_KEY} "DisplayName" StrCmp $R0 "" uninstall_before_done MessageBox MB_YESNO|MB_ICONEXCLAMATION $(lng_WANT_UNINSTALL_BEFORE) /SD IDNO IDYES +1 IDNO uninstall_before_done ;Run the uninstaller ;uninst: ClearErrors ExecWait '$R0 _?=$INSTDIR' ;Do not copy the uninstaller to a temp file uninstall_before_done: ; proccess command line parameter !insertmacro Parameter "GTK" ${SecGTK} !insertmacro Parameter "SHORTCUTS" ${secShortcuts} !insertmacro Parameter "ALLUSER" ${SecAlluser} !insertmacro Parameter "DESKTOP" ${SecDesktop} !insertmacro Parameter "QUICKLAUNCH" ${SecQUICKlaunch} !insertmacro Parameter "SVGEDITOR" ${SecSVGWriter} !insertmacro Parameter "CONTEXTMENUE" ${SecContextMenu} !insertmacro Parameter "PREFERENCES" ${SecPrefs} !insertmacro Parameter "ADDFILES" ${SecAddfiles} !insertmacro Parameter "EXAMPLES" ${SecExamples} !insertmacro Parameter "TUTORIALS" ${SecTutorials} !insertmacro Parameter "LANGUAGES" ${SecLanguages} !insertmacro Parameter "am" ${SecAmharic} !insertmacro Parameter "az" ${SecAzerbaijani} !insertmacro Parameter "be" ${SecByelorussian} !insertmacro Parameter "bg" ${SecBulgarian} !insertmacro Parameter "bn" ${SecBengali} !insertmacro Parameter "ca" ${SecCatalan} !insertmacro Parameter "cs" ${SecCzech} !insertmacro Parameter "da" ${SecDanish} !insertmacro Parameter "de" ${SecGerman} !insertmacro Parameter "dz" ${SecDzongkha} !insertmacro Parameter "el" ${SecGreek} !insertmacro Parameter "en_AU" ${SecEnglishAustralian} !insertmacro Parameter "en_CA" ${SecEnglishCanadian} !insertmacro Parameter "en_GB" ${SecEnglishBritain} !insertmacro Parameter "en_US@piglatin" ${SecEnglishPiglatin} !insertmacro Parameter "eo" ${SecEsperanto} !insertmacro Parameter "es" ${SecSpanish} !insertmacro Parameter "es_MX" ${SecSpanishMexico} !insertmacro Parameter "et" ${SecEstonian} !insertmacro Parameter "eu" ${SecBasque} !insertmacro Parameter "fi" ${SecFinnish} !insertmacro Parameter "fr" ${SecFrench} !insertmacro Parameter "ga" ${SecIrish} !insertmacro Parameter "gl" ${SecGallegan} !insertmacro Parameter "he" ${SecHebrew} !insertmacro Parameter "hr" ${SecCroatian} !insertmacro Parameter "hu" ${SecHungarian} !insertmacro Parameter "id" ${SecIndonesian} !insertmacro Parameter "it" ${SecItalian} !insertmacro Parameter "ja" ${SecJapanese} !insertmacro Parameter "km" ${SecKhmer} !insertmacro Parameter "ko" ${SecKorean} !insertmacro Parameter "lt" ${SecLithuanian} !insertmacro Parameter "mk" ${SecMacedonian} !insertmacro Parameter "mn" ${SecMongolian} !insertmacro Parameter "nb" ${SecNorwegianBokmal} !insertmacro Parameter "ne" ${SecNepali} !insertmacro Parameter "nl" ${SecDutch} !insertmacro Parameter "nn" ${SecNorwegianNynorsk} !insertmacro Parameter "pa" ${SecPanjabi} !insertmacro Parameter "pl" ${SecPolish} !insertmacro Parameter "pt" ${SecPortuguese} !insertmacro Parameter "pt_BR" ${SecPortugueseBrazil} !insertmacro Parameter "ro" ${SecRomanian} !insertmacro Parameter "ru" ${SecRussian} !insertmacro Parameter "rw" ${SecKinyarwanda} !insertmacro Parameter "sk" ${SecSlovak} !insertmacro Parameter "sl" ${SecSlovenian} !insertmacro Parameter "sq" ${SecAlbanian} !insertmacro Parameter "sr" ${SecSerbian} !insertmacro Parameter "sr@Latn" ${SecSerbianLatin} !insertmacro Parameter "sv" ${SecSwedish} !insertmacro Parameter "th" ${SecThai} !insertmacro Parameter "tr" ${SecTurkish} !insertmacro Parameter "uk" ${SecUkrainian} !insertmacro Parameter "vi" ${SecVietnamese} !insertmacro Parameter "zh_CN" ${SecChineseSimplified} !insertmacro Parameter "zh_TW" ${SecChineseTaiwan} Push "?" Push "TEST" Call GetParameterValue Pop $1 StrCmp $1 "TEST" +3 MessageBox MB_OK "possible parameters for installer:$\r$\n \ /?: this help screen$\r$\n \ /S: silent$\r$\n \ /D=(directory): where to install inkscape$\r$\n \ /GTK=(OFF/ON): GTK+ Runtime environment$\r$\n \ /SHORTCUTS=(OFF/ON): shortcuts to start inkscape$\r$\n \ /ALLUSER=(OFF/ON): for all users on the computer$\r$\n \ /DESKTOP=(OFF/ON): Desktop icon$\r$\n \ /QUICKLAUNCH=(OFF/ON): quick launch icon$\r$\n \ /SVGEDITOR=(OFF/ON): default SVG editor$\r$\n \ /CONTEXTMENUE=(OFF/ON): context menue integration$\r$\n \ /PREFERENCES=(OFF/ON): delete users preference files$\r$\n \ /ADDFILES=(OFF/ON): additional files$\r$\n \ /EXAMPLES=(OFF/ON): examples$\r$\n \ /TUTORIALS=(OFF/ON): tutorials$\r$\n \ /LANGUAGES=(OFF/ON): translated menues, examples, etc.$\r$\n \ /[locale code]=(OFF/ON): e.g am, es, es_MX as in Inkscape supported" Abort FunctionEnd Function .onSelChange FunctionEnd ; -------------------------------------------------- Function un.CustomPageUninstall !insertmacro MUI_HEADER_TEXT "$(lng_UInstOpt)" "$(lng_UInstOpt1)" !insertmacro MUI_INSTALLOPTIONS_WRITE "inkscape.nsi.uninstall" "Field 1" "Text" "$APPDATA\Inkscape\" !insertmacro MUI_INSTALLOPTIONS_WRITE "inkscape.nsi.uninstall" "Field 2" "Text" "$(lng_PurgePrefs)" !insertmacro MUI_INSTALLOPTIONS_DISPLAY "inkscape.nsi.uninstall" !insertmacro MUI_INSTALLOPTIONS_READ $MultiUser "inkscape.nsi.uninstall" "Field 2" "State" DetailPrint "keepfiles = $MultiUser" ;MessageBox MB_OK "adminmode = $MultiUser MultiUserOS = $askMultiUser" FunctionEnd Function un.onInit ClearErrors StrCpy $User "" UserInfo::GetName IfErrors +3 Pop $0 StrCpy $User $0 StrCpy $askMultiUser "1" StrCpy $MultiUser "1" ; Test if this was a multiuser installation ReadRegStr $0 HKLM "${PRODUCT_DIR_REGKEY}" "" StrCmp $0 "$INSTDIR\inkscape.exe" 0 hkcu_user_uninstall ReadRegStr $MultiUser HKLM "${PRODUCT_DIR_REGKEY}" "MultiUser" ReadRegStr $askMultiUser HKLM "${PRODUCT_DIR_REGKEY}" "askMultiUser" ReadRegStr $0 HKLM "${PRODUCT_DIR_REGKEY}" "User" Goto check_user_uninstall hkcu_user_uninstall: ReadRegStr $MultiUser HKCU "${PRODUCT_DIR_REGKEY}" "MultiUser" ReadRegStr $askMultiUser HKCU "${PRODUCT_DIR_REGKEY}" "askMultiUser" ReadRegStr $0 HKCU "${PRODUCT_DIR_REGKEY}" "User" ;check user if applicable check_user_uninstall: StrCmp $0 "" diff_user_uninstall_done StrCmp $0 $User diff_user_uninstall_done MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "$(lng_DIFFERENT_USER)$(lng_OK_CANCEL_DESC)" /SD IDOK IDOK diff_user_uninstall_done IDCANCEL +1 Quit diff_user_uninstall_done: !insertmacro MUI_INSTALLOPTIONS_EXTRACT "inkscape.nsi.uninstall" ;check whether Multi user installation ? SetShellVarContext all StrCmp $MultiUser "0" 0 +2 SetShellVarContext current ;MessageBox MB_OK "adminmode = $MultiUser MultiUserOS = $askMultiUser" FunctionEnd Section Uninstall ; remove personal settings Delete "$APPDATA\Inkscape\extension-errors.log" StrCmp $MultiUser "0" 0 endPurge ; multiuser assigned in dialog DetailPrint "purge personal settings in $APPDATA\Inkscape" ;RMDir /r "$APPDATA\Inkscape" !insertmacro delprefs endPurge: ; Remove file associations for svg editor DetailPrint "removing file associations for svg editor" ClearErrors ReadRegStr $0 HKCR ".svg" "" DetailPrint ".svg associated as $0" IfErrors endUninstSVGEdit ReadRegStr $1 HKCR "$0\shell\edit\command" "" IfErrors 0 +2 DetailPrint "svg editor is $1" StrCmp $1 '"$INSTDIR\Inkscape.exe" "%1"' 0 +3 DetailPrint "removing default .svg editor" DeleteRegKey HKCR "$0\shell\edit\command" DeleteRegKey /ifempty HKCR "$0\shell\edit" DeleteRegKey /ifempty HKCR "$0\shell" DeleteRegKey /ifempty HKCR "$0" endUninstSVGEdit: ClearErrors ReadRegStr $2 HKCR ".svgz" "" DetailPrint ".svgz associated as $2" IfErrors endUninstSVGZEdit ReadRegStr $3 HKCR "$2\shell\edit\command" "" IfErrors 0 +2 DetailPrint "svgz editor is $1" StrCmp $3 '"$INSTDIR\Inkscape.exe" "%1"' 0 +3 DetailPrint "removing default .svgz editor" DeleteRegKey HKCR "$2\shell\edit\command" DeleteRegKey /ifempty HKCR "$2\shell\edit" DeleteRegKey /ifempty HKCR "$2\shell" DeleteRegKey /ifempty HKCR "$2" endUninstSVGZEdit: ; Remove file associations for svg editor DetailPrint "removing file associations for svg editor" ClearErrors ReadRegStr $0 HKCR ".svg" "" IfErrors endUninstSVGView ReadRegStr $1 HKCR "$0\shell\open\command" "" IfErrors 0 +2 DetailPrint "svg viewer is $1" StrCmp $1 '"$INSTDIR\Inkscape.exe" "%1"' 0 +3 DetailPrint "removing default .svg viewer" DeleteRegKey HKCR "$0\shell\open\command" DeleteRegKey /ifempty HKCR "$0\shell\open" DeleteRegKey /ifempty HKCR "$0\shell" DeleteRegKey /ifempty HKCR "$0" endUninstSVGView: ClearErrors ReadRegStr $2 HKCR ".svgz" "" IfErrors endUninstSVGZView ReadRegStr $3 HKCR "$2\shell\open\command" "" IfErrors 0 +2 DetailPrint "svgz viewer is $1" StrCmp $3 '"$INSTDIR\Inkscape.exe" "%1"' 0 +3 DetailPrint "removing default .svgz viewer" DeleteRegKey HKCR "$2\shell\open\command" DeleteRegKey /ifempty HKCR "$2\shell\open" DeleteRegKey /ifempty HKCR "$2\shell" DeleteRegKey /ifempty HKCR "$2" endUninstSVGZView: ; Remove file associations for context menue DetailPrint "removing file associations for svg editor" ClearErrors ReadRegStr $0 HKCR ".svg" "" IfErrors endUninstSVGContext DetailPrint "removing default .svg context menue" DeleteRegKey HKCR "$0\shell\${PRODUCT_NAME}" DeleteRegKey /ifempty HKCR "$0\shell" DeleteRegKey /ifempty HKCR "$0" endUninstSVGContext: ClearErrors ReadRegStr $2 HKCR ".svgz" "" IfErrors endUninstSVGZContext DetailPrint "removing default .svgzcontext menue" DeleteRegKey HKCR "$2\shell\${PRODUCT_NAME}" DeleteRegKey /ifempty HKCR "$2\shell" DeleteRegKey /ifempty HKCR "$2" endUninstSVGZContext: ReadRegStr $1 HKCR "$0" "" StrCmp $1 "" 0 +3 DetailPrint "removing filetype .svg $0" DeleteRegKey HKCR ".svg" ReadRegStr $3 HKCR "$2" "" StrCmp $3 "" 0 +3 DetailPrint "removing filetype .svgz $2" DeleteRegKey HKCR ".svgz" SetShellVarContext all DetailPrint "removing product regkey" DeleteRegKey SHCTX "${PRODUCT_DIR_REGKEY}" DetailPrint "removing uninstall info" DeleteRegKey SHCTX "${PRODUCT_UNINST_KEY}" DetailPrint "removing shortcuts" Delete "$DESKTOP\Inkscape.lnk" Delete "$QUICKLAUNCH\Inkscape.lnk" Delete "$SMPROGRAMS\Inkscape.lnk" ;just in case they are still there Delete "$SMPROGRAMS\Inkscape\Uninstall Inkscape.lnk" Delete "$SMPROGRAMS\Inkscape\Inkscape.lnk" RMDir "$SMPROGRAMS\Inkscape" SetShellVarContext current DetailPrint "removing product regkey" DeleteRegKey SHCTX "${PRODUCT_DIR_REGKEY}" DetailPrint "removing uninstall info" DeleteRegKey SHCTX "${PRODUCT_UNINST_KEY}" DetailPrint "removing shortcuts" Delete "$DESKTOP\Inkscape.lnk" Delete "$QUICKLAUNCH\Inkscape.lnk" Delete "$SMPROGRAMS\Inkscape.lnk" ;just in case they are still there Delete "$SMPROGRAMS\Inkscape\Uninstall Inkscape.lnk" Delete "$SMPROGRAMS\Inkscape\Inkscape.lnk" RMDir "$SMPROGRAMS\Inkscape" DetailPrint "removing uninstall info" RMDir /r "$INSTDIR" SetAutoClose false SectionEnd