inkscape.nsi revision 8a5b7aa04ab737c22c2f8881fa4a181c93d27bfb
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; #######################################
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Inkscape NSIS installer project file
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Used as of 0.40
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; #######################################
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; #######################################
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; #######################################
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!define PRODUCT_NAME "Inkscape"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!define PRODUCT_VERSION "0.45+devel"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!define PRODUCT_PUBLISHER "Inkscape Organization"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!define PRODUCT_WEB_SITE "http://www.inkscape.org"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\inkscape.exe"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;!define UNINST_EXE "uninstall.exe"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; #######################################
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; MUI SETTINGS
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; #######################################
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; MUI 1.67 compatible ------
4eeb28ea335313c708fe2730312f94978b07dd04Dav GlassSetCompressor /SOLID lzma
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!define MUI_ABORTWARNING
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!define MUI_HEADERIMAGE
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!define MUI_HEADERIMAGE_BITMAP "header.bmp"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!define MUI_COMPONENTSPAGE_SMALLDESC
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;..................................................................................................
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;Following two definitions required. Uninstall log will use these definitions.
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;You may use these definitions also, when you want to set up the InstallDirRagKey,
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;store the language selection, store Start Menu folder etc.
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;Enter the windows uninstall reg sub key to add uninstall information to Add/Remove Programs also.
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!define INSTDIR_REG_ROOT "HKLM"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!define INSTDIR_REG_KEY ${PRODUCT_UNINST_KEY}
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;include the Uninstall log header
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;Specify the preferred uninstaller operation mode, either unattended or interactive.
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;You have to type either !insertmacro UNATTENDED_UNINSTALL, or !insertmacro INTERACTIVE_UNINSTALL.
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;Be aware only one of the following two macros has to be inserted, neither both, neither none.
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;!insertmacro UNATTENDED_UNINSTALL
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!insertmacro INTERACTIVE_UNINSTALL
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!addplugindir .
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Welcome page
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!insertmacro MUI_PAGE_WELCOME
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; License page
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; !define MUI_LICENSEPAGE_RADIOBUTTONS
4eeb28ea335313c708fe2730312f94978b07dd04Dav GlassLicenseForceSelection off
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!define MUI_LICENSEPAGE_BUTTON $(lng_LICENSE_BUTTON)
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!define MUI_LICENSEPAGE_TEXT_BOTTOM $(lng_LICENSE_BOTTOM_TEXT)
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!insertmacro MUI_PAGE_LICENSE "..\..\Copying"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!insertmacro MUI_PAGE_COMPONENTS
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; InstType $(lng_Full)
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; InstType $(lng_Optimal)
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; InstType $(lng_Minimal)
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Directory page
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!insertmacro MUI_PAGE_DIRECTORY
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Instfiles page
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!insertmacro MUI_PAGE_INSTFILES
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Finish page
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!define MUI_FINISHPAGE_RUN "$INSTDIR\inkscape.exe"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!insertmacro MUI_PAGE_FINISH
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Uninstaller pages
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!insertmacro MUI_UNPAGE_CONFIRM
4eeb28ea335313c708fe2730312f94978b07dd04Dav GlassUninstPage custom un.CustomPageUninstall
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!insertmacro MUI_UNPAGE_INSTFILES
4eeb28ea335313c708fe2730312f94978b07dd04Dav GlassShowUninstDetails hide
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!insertmacro MUI_UNPAGE_FINISH
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; #######################################
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; STRING LOCALIZATION
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; #######################################
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Thanks to Adib Taraben and Luca Bruno for getting this started
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Add your translation here! :-)
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; I had wanted to list the languages alphabetically, but apparently
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; the first is the default. So putting English first is just being
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; practical. It is not chauvinism or hubris, I swear! ;-)
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; default language first
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Language files
4eeb28ea335313c708fe2730312f94978b07dd04Dav GlassReserveFile "${NSISDIR}\Plugins\UserInfo.dll"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS ;InstallOptions
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; #######################################
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; #######################################
4eeb28ea335313c708fe2730312f94978b07dd04Dav GlassName "${PRODUCT_NAME} ${PRODUCT_VERSION}"
4eeb28ea335313c708fe2730312f94978b07dd04Dav GlassCaption $(lng_Caption)
4eeb28ea335313c708fe2730312f94978b07dd04Dav GlassOutFile "Inkscape-${PRODUCT_VERSION}-1.win32.exe"
4eeb28ea335313c708fe2730312f94978b07dd04Dav GlassInstallDir "$PROGRAMFILES\Inkscape"
4eeb28ea335313c708fe2730312f94978b07dd04Dav GlassInstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
4eeb28ea335313c708fe2730312f94978b07dd04Dav GlassShowInstDetails hide
4eeb28ea335313c708fe2730312f94978b07dd04Dav GlassShowUnInstDetails hide
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glassvar askMultiUser
4eeb28ea335313c708fe2730312f94978b07dd04Dav GlassVar MultiUser
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; #######################################
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; I N S T A L L E R S E C T I O N S
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; #######################################
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Turn off old selected section
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; GetWindowsVersion
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Based on Yazno's function, http://yazno.tripod.com/powerpimpit/
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Updated by Joost Verburg
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Updated for Windows 98 SE by Matthew Win Tibbals 5-21-03
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Returns on top of stack
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Windows Version (95, 98, ME, NT x.x, 2000, XP, 2003)
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; '' (Unknown Windows Version)
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Call GetWindowsVersion
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; ; at this point $R0 is "NT 4.0" or whatnot
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4eeb28ea335313c708fe2730312f94978b07dd04Dav GlassFunction GetWindowsVersion
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass IfErrors 0 lbl_winnt
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; we are not NT
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion" VersionNumber
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R1 $R0 1
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $R1 '4' 0 lbl_error
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R1 $R0 3
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $R1 '4.0' lbl_win32_95
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $R1 '4.9' lbl_win32_ME lbl_win32_98
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass lbl_win32_95:
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R0 '95'
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $AskMultiUser "0"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Goto lbl_done
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass lbl_win32_98:
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R0 '98'
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $AskMultiUser "0"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Goto lbl_done
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass lbl_win32_ME:
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R0 'ME'
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $AskMultiUser "0"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Goto lbl_done
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R1 $R0 1
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $R1 '3' lbl_winnt_x
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $R1 '4' lbl_winnt_x
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R1 $R0 3
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $R1 '5.0' lbl_winnt_2000
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $R1 '5.1' lbl_winnt_XP
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $R1 '5.2' lbl_winnt_2003 lbl_error
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass lbl_winnt_x:
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R0 "NT $R0" 6
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Goto lbl_done
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass lbl_winnt_2000:
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Strcpy $R0 '2000'
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Goto lbl_done
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass lbl_winnt_XP:
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Strcpy $R0 'XP'
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Goto lbl_done
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass lbl_winnt_2003:
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Strcpy $R0 '2003'
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Goto lbl_done
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Strcpy $R0 ''
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; input, top of stack = string to search for
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; top of stack-1 = string to search in
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; output, top of stack (replaces with the portion of the string remaining)
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; modifies no other variables.
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; Push "this is a long ass string"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; Push "ass"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; Call StrStr
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; ($R0 at this point is "ass string")
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Function StrStr
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Exch $R1 ; st=haystack,old$R1, $R1=needle
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Exch ; st=old$R1,haystack
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Exch $R2 ; st=old$R1,old$R2, $R2=haystack
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrLen $R3 $R1
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R4 0
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; $R1=needle
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; $R2=haystack
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; $R3=len(needle)
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R5 $R2 $R3 $R4
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $R5 $R1 done
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $R5 "" done
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass IntOp $R4 $R4 + 1
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R1 $R2 "" $R4
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; GetParameters
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; input, none
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; output, top of stack (replaces, with e.g. whatever)
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; modifies no other variables.
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Function GetParameters
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R2 1
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrLen $R3 $CMDLINE
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ;Check for quote or space
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R0 $CMDLINE $R2
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $R0 '"' 0 +3
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R1 '"'
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R1 " "
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass IntOp $R2 $R2 + 1
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R0 $CMDLINE 1 $R2
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $R0 $R1 get
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $R2 $R3 get
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass IntOp $R2 $R2 + 1
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R0 $CMDLINE 1 $R2
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $R0 " " get
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R0 $CMDLINE "" $R2
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; GetParameterValue
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Chris Morgan<cmorgan@alum.wpi.edu> 5/10/2004
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; -Updated 4/7/2005 to add support for retrieving a command line switch
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; and additional documentation
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Searches the command line input, retrieved using GetParameters, for the
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; value of an option given the option name. If no option is found the
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; default value is placed on the top of the stack upon function return.
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; This function can also be used to detect the existence of just a
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; command line switch like /OUTPUT Pass the default and "OUTPUT"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; on the stack like normal. An empty return string "" will indicate
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; that the switch was found, the default value indicates that
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; neither a parameter or switch was found.
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Inputs - Top of stack is default if parameter isn't found,
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; second in stack is parameter to search for, ex. "OUTPUT"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Outputs - Top of the stack contains the value of this parameter
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; So if the command line contained /OUTPUT=somedirectory, "somedirectory"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; will be on the top of the stack when this function returns
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Register usage
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;$R0 - default return value if the parameter isn't found
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;$R1 - input parameter, for example OUTPUT from the above example
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;$R2 - the length of the search, this is the search parameter+2
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; as we have '/OUTPUT='
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;$R3 - the command line string
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;$R4 - result from StrStr calls
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;$R5 - search for ' ' or '"'
4eeb28ea335313c708fe2730312f94978b07dd04Dav GlassFunction GetParameterValue
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Exch $R0 ; get the top of the stack(default parameter) into R0
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Exch ; exchange the top of the stack(default) with
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; the second in the stack(parameter to search for)
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Exch $R1 ; get the top of the stack(search parameter) into $R1
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ;Preserve on the stack the registers used in this function
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Strlen $R2 $R1+2 ; store the length of the search string into R2
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Call GetParameters ; get the command line parameters
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Pop $R3 ; store the command line string in R3
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass # search for quoted search string
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R5 '"' ; later on we want to search for a open quote
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Push $R3 ; push the 'search in' string onto the stack
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Push '"/$R1=' ; push the 'search for'
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Call StrStr ; search for the quoted parameter value
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R4 $R4 "" 1 ; skip over open quote character, "" means no maxlen
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $R4 "" "" next ; if we didn't find an empty string go to next
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass # search for non-quoted search string
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R5 ' ' ; later on we want to search for a space since we
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; didn't start with an open quote '"' we shouldn't
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; look for a close quote '"'
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Push $R3 ; push the command line back on the stack for searching
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Push '/$R1=' ; search for the non-quoted search string
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; $R4 now contains the parameter string starting at the search string,
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; if it was found
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $R4 "" check_for_switch ; if we didn't find anything then look for
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; usage as a command line switch
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass # copy the value after /$R1= by using StrCpy with an offset of $R2,
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass # the length of '/OUTPUT='
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R0 $R4 "" $R2 ; copy commandline text beyond parameter into $R0
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass # search for the next parameter so we can trim this extra text off
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Push $R5 ; search for either the first space ' ', or the first
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; if we found '"/output' then we want to find the
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; ending ", as in '"/output=somevalue"'
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; if we found '/output' then we want to find the first
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; space after '/output=somevalue'
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Call StrStr ; search for the next parameter
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $R4 "" done ; if 'somevalue' is missing, we are done
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrLen $R4 $R4 ; get the length of 'somevalue' so we can copy this
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; text into our output buffer
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R0 $R0 -$R4 ; using the length of the string beyond the value,
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; copy only the value into $R0
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass goto done ; if we are in the parameter retrieval path skip over
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; the check for a command line switch
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; See if the parameter was specified as a command line switch, like '/output'
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glasscheck_for_switch:
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Push $R3 ; push the command line back on the stack for searching
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Push '/$R1' ; search for the non-quoted search string
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $R4 "" done ; if we didn't find anything then use the default
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCpy $R0 "" ; otherwise copy in an empty string since we found the
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; parameter, just didn't find a value
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Exch $R0 ; put the value in $R0 at the top of the stack
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!macro Language polng lng
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass SectionIn 1 2 3
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass SetOutPath $INSTDIR
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass File /nonfatal /a "..\..\inkscape\*.${lng}.txt"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass SetOutPath $INSTDIR\locale
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass File /nonfatal /a /r "..\..\inkscape\locale\${polng}"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass SetOutPath $INSTDIR\lib\locale
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass File /nonfatal /a /r "..\..\inkscape\lib\locale\${polng}"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass SetOutPath $INSTDIR\share\clipart
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass File /nonfatal /a /r "..\..\inkscape\share\clipart\*.${polng}.svg"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; the keyboard tables
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass SetOutPath $INSTDIR\share\screens
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass File /nonfatal /a /r "..\..\inkscape\share\screens\*.${polng}.svg"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass SetOutPath $INSTDIR\share\templates
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass File /nonfatal /a /r "..\..\inkscape\share\templates\*.${polng}.svg"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass SetOutPath $INSTDIR\doc
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass File /nonfatal /a /r "..\..\inkscape\doc\keys.${polng}.xml"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass File /nonfatal /a /r "..\..\inkscape\doc\keys.${polng}.html"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass SectionGetFlags ${SecTutorials} $R1
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass IntOp $R1 $R1 & ${SF_SELECTED}
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass IntCmp $R1 ${SF_SELECTED} 0 skip_tutorials
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass SetOutPath $INSTDIR\share\tutorials
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass File /nonfatal /a "..\..\inkscape\share\tutorials\*.${polng}.*"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass skip_tutorials:
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;;;;;;;;;;;;;;;;;;;;;;;;;;
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; Delete prefs
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass; code taken from the vlc project
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass;;;;;;;;;;;;;;;;;;;;;;;;;;
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass!macro delprefs
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass DetailPrint "Delete personal preferences ..."
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass DetailPrint "try to find all users ..."
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass delprefs-Loop:
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; this will loop through all the logged users and "virtual" windows users
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ; (it looks like users are only present in HKEY_USERS when they are logged in)
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass EnumRegKey $1 HKU "" $0
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $1 "" delprefs-End
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass IntOp $0 $0 + 1
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ReadRegStr $2 HKU "$1\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" AppData
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass StrCmp $2 "" delprefs-Loop
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass DetailPrint "$2\Inkscape will be removed"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Delete "$2\Inkscape\preferences.xml"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Delete "$2\Inkscape\extension-errors.log"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass RMDir "$2\Inkscape"
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass Goto delprefs-Loop
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass delprefs-End:
b0169b44d41a48049d06f32a6807f81dbcf1f328Dav Glass;--------------------------------
b0169b44d41a48049d06f32a6807f81dbcf1f328Dav Glass; Installer Sections
b0169b44d41a48049d06f32a6807f81dbcf1f328Dav GlassSection -removeInkscape
b0169b44d41a48049d06f32a6807f81dbcf1f328Dav Glass ; check for an old installation and clean that dlls and stuff
b0169b44d41a48049d06f32a6807f81dbcf1f328Dav GlassFindFirstINSTDIR:
b0169b44d41a48049d06f32a6807f81dbcf1f328Dav Glass FindFirst $0 $1 $INSTDIR\*.*
118b2b253667c51a1cff0367ecde38cb69f7b2ebDav Glass StrCmp $1 "" FindNextDoneINSTDIR
118b2b253667c51a1cff0367ecde38cb69f7b2ebDav Glass StrCmp $1 "." FindNextINSTDIR
118b2b253667c51a1cff0367ecde38cb69f7b2ebDav Glass StrCmp $1 ".." FindNextINSTDIR
118b2b253667c51a1cff0367ecde38cb69f7b2ebDav Glass Goto FoundSomethingINSTDIR
118b2b253667c51a1cff0367ecde38cb69f7b2ebDav GlassFindNextINSTDIR:
118b2b253667c51a1cff0367ecde38cb69f7b2ebDav Glass FindNext $0 $1
118b2b253667c51a1cff0367ecde38cb69f7b2ebDav Glass Goto FindINSTDIR
118b2b253667c51a1cff0367ecde38cb69f7b2ebDav GlassFoundSomethingINSTDIR:
118b2b253667c51a1cff0367ecde38cb69f7b2ebDav Glass MessageBox MB_RETRYCANCEL|MB_ICONEXCLAMATION "$(lng_ClearDirectoryBefore)" /SD IDCANCEL IDRETRY FindFirstINSTDIR
4eeb28ea335313c708fe2730312f94978b07dd04Dav GlassFindNextDoneINSTDIR:
4eeb28ea335313c708fe2730312f94978b07dd04Dav Glass ;remove the old inkscape shortcuts from the startmenu
Delete "$SMPROGRAMS\Inkscape\Uninstall Inkscape.lnk"
Delete "$SMPROGRAMS\Inkscape\Inkscape.lnk"
Delete "$SMPROGRAMS\Inkscape.lnk"
Delete "$SMPROGRAMS\Inkscape\Uninstall Inkscape.lnk"
Delete "$SMPROGRAMS\Inkscape\Inkscape.lnk"
Delete "$SMPROGRAMS\Inkscape.lnk"
!insertmacro UNINSTALL.LOG_OPEN_INSTALL
File /a "..\..\inkscape\COPYING.LIB"
File /a "..\..\inkscape\gspawn-win32-helper.exe"
File /a "..\..\inkscape\gspawn-win32-helper-console.exe"
File /nonfatal /a "..\..\inkscape\HACKING.txt"
File /nonfatal /a "..\..\inkscape\README.txt"
!insertmacro UNINSTALL.LOG_CLOSE_INSTALL
!insertmacro UNINSTALL.LOG_OPEN_INSTALL
File /a "..\..\inkscape\share\clipart\inkscape.logo.svg"
;File /a "..\..\inkscape\share\clipart\inkscape.logo.classic.svg"
!insertmacro UNINSTALL.LOG_CLOSE_INSTALL
!insertmacro UNINSTALL.LOG_OPEN_INSTALL
File /a "..\..\inkscape\share\extensions\pdf_output.inx.txt"
File /a "..\..\inkscape\share\extensions\pdf_output_via_gs_on_win32.inx.txt"
!insertmacro UNINSTALL.LOG_CLOSE_INSTALL
!insertmacro UNINSTALL.LOG_OPEN_INSTALL
File /a "..\..\inkscape\share\icons\inkscape.file.png"
File /a "..\..\inkscape\share\icons\inkscape.file.svg"
!insertmacro UNINSTALL.LOG_CLOSE_INSTALL
!insertmacro UNINSTALL.LOG_OPEN_INSTALL
!insertmacro UNINSTALL.LOG_CLOSE_INSTALL
!insertmacro UNINSTALL.LOG_OPEN_INSTALL
!insertmacro UNINSTALL.LOG_CLOSE_INSTALL
!insertmacro UNINSTALL.LOG_OPEN_INSTALL
!insertmacro UNINSTALL.LOG_CLOSE_INSTALL
; disable this option in Win95/Win98/WinME
WriteRegStr HKCR "$0\shell\edit\command" "" '"$INSTDIR\Inkscape.exe" "%1"'
WriteRegStr HKCR "$0\shell\edit\command" "" '"$INSTDIR\Inkscape.exe" "%1"'
WriteRegStr HKCR "$0\shell\${PRODUCT_NAME}\command" "" '"$INSTDIR\Inkscape.exe" "%1"'
WriteRegStr HKCR "$0\shell\${PRODUCT_NAME}\command" "" '"$INSTDIR\Inkscape.exe" "%1"'
!insertmacro UNINSTALL.LOG_OPEN_INSTALL
!insertmacro UNINSTALL.LOG_CLOSE_INSTALL
!insertmacro UNINSTALL.LOG_OPEN_INSTALL
!insertmacro UNINSTALL.LOG_CLOSE_INSTALL
WriteRegStr SHCTX "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\inkscape.exe"
; WriteUninstaller "$INSTDIR\uninst.exe"
WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\Inkscape.exe,0"
;create/update log always within .onInstSuccess function
!insertmacro UNINSTALL.LOG_UPDATE_INSTALL
FileOpen $0 $INSTDIR\uninstall.dat r
FileOpen $9 $INSTDIR\uninstall.log w
Delete $INSTDIR\uninstall.dat
!insertmacro UNINSTALL.LOG_PREPARE_INSTALL
MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "$(lng_NO_ADMIN)$(lng_OK_CANCEL_DESC)" /SD IDOK IDOK info_done IDCANCEL +1
MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "$(lng_NOT_SUPPORTED)$(lng_OK_CANCEL_DESC)" /SD IDOK IDOK info_done IDCANCEL +1
MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "$(lng_DIFFERENT_USER)$(lng_OK_CANCEL_DESC)" /SD IDOK IDOK diff_user_install_done IDCANCEL +1
MessageBox MB_YESNO|MB_ICONEXCLAMATION $(lng_WANT_UNINSTALL_BEFORE) /SD IDNO IDNO uninstall_before_done
/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 \
Function un.CustomPageUninstall
!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"
Function un.onInit
;!insertmacro UNINSTALL.LOG_BEGIN_UNINSTALL
IfFileExists $INSTDIR\uninstall.log uninstalllogpresent
StrCmp $0 "$INSTDIR\inkscape.exe" 0 hkcu_user_uninstall
MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "$(lng_DIFFERENT_USER)$(lng_OK_CANCEL_DESC)" /SD IDOK IDOK diff_user_uninstall_done IDCANCEL +1
!insertmacro MUI_INSTALLOPTIONS_EXTRACT "inkscape.nsi.uninstall"
Function un.RemoveFile
${un.GetParent} $filename $filename
Delete "$APPDATA\Inkscape\extension-errors.log"
StrCmp $1 '"$INSTDIR\Inkscape.exe" "%1"' 0 +3
StrCmp $3 '"$INSTDIR\Inkscape.exe" "%1"' 0 +3
StrCmp $1 '"$INSTDIR\Inkscape.exe" "%1"' 0 +3
StrCmp $3 '"$INSTDIR\Inkscape.exe" "%1"' 0 +3
Delete "$DESKTOP\Inkscape.lnk"
Delete "$QUICKLAUNCH\Inkscape.lnk"
Delete "$SMPROGRAMS\Inkscape.lnk"
Delete "$SMPROGRAMS\Inkscape\Uninstall Inkscape.lnk"
Delete "$SMPROGRAMS\Inkscape\Inkscape.lnk"
Delete "$DESKTOP\Inkscape.lnk"
Delete "$QUICKLAUNCH\Inkscape.lnk"
Delete "$SMPROGRAMS\Inkscape.lnk"
Delete "$SMPROGRAMS\Inkscape\Uninstall Inkscape.lnk"
Delete "$SMPROGRAMS\Inkscape\Inkscape.lnk"
;!insertmacro UNINSTALL.LOG_UNINSTALL "$INSTDIR\lib\locale"
;!insertmacro UNINSTALL.LOG_UNINSTALL "$INSTDIR\locale"
;!insertmacro UNINSTALL.LOG_UNINSTALL "$INSTDIR\doc"
;!insertmacro UNINSTALL.LOG_UNINSTALL "$INSTDIR\share\tutorials"
;!insertmacro UNINSTALL.LOG_UNINSTALL "$INSTDIR\share\templates"
;!insertmacro UNINSTALL.LOG_UNINSTALL "$INSTDIR\share\screens"
;!insertmacro UNINSTALL.LOG_UNINSTALL "$INSTDIR\share\clipart"
;!insertmacro UNINSTALL.LOG_UNINSTALL "$INSTDIR\share\extensions"
;!insertmacro UNINSTALL.LOG_UNINSTALL "$INSTDIR\share\icons"
;!insertmacro UNINSTALL.LOG_UNINSTALL "$INSTDIR\share"
;!insertmacro UNINSTALL.LOG_UNINSTALL "$INSTDIR\modules"
;!insertmacro UNINSTALL.LOG_UNINSTALL "$INSTDIR\python"
;!insertmacro UNINSTALL.LOG_UNINSTALL "$INSTDIR"
;!insertmacro UNINSTALL.LOG_END_UNINSTALL
FileOpen $0 $INSTDIR\uninstall.log r
StrCpy $4 $1 $2-36 34 #remove trailing CR/LF
Call un.RemoveFile
Delete "$INSTDIR\uninstall.log"
Delete "$INSTDIR\uninstall.exe"