2007-03-22 10:30:00 -07:00
|
|
|
# ***** BEGIN LICENSE BLOCK *****
|
|
|
|
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
|
|
|
#
|
|
|
|
# The contents of this file are subject to the Mozilla Public License Version
|
|
|
|
# 1.1 (the "License"); you may not use this file except in compliance with
|
|
|
|
# the License. You may obtain a copy of the License at
|
|
|
|
# http://www.mozilla.org/MPL/
|
|
|
|
#
|
|
|
|
# Software distributed under the License is distributed on an "AS IS" basis,
|
|
|
|
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
|
|
# for the specific language governing rights and limitations under the
|
|
|
|
# License.
|
|
|
|
#
|
|
|
|
# The Original Code is the Mozilla Installer code.
|
|
|
|
#
|
|
|
|
# The Initial Developer of the Original Code is Mozilla Foundation
|
|
|
|
# Portions created by the Initial Developer are Copyright (C) 2006
|
|
|
|
# the Initial Developer. All Rights Reserved.
|
|
|
|
#
|
|
|
|
# Contributor(s):
|
|
|
|
# Robert Strong <robert.bugzilla@gmail.com>
|
|
|
|
#
|
|
|
|
# Alternatively, the contents of this file may be used under the terms of
|
|
|
|
# either the GNU General Public License Version 2 or later (the "GPL"), or
|
|
|
|
# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
|
|
# in which case the provisions of the GPL or the LGPL are applicable instead
|
|
|
|
# of those above. If you wish to allow use of your version of this file only
|
|
|
|
# under the terms of either the GPL or the LGPL, and not to allow others to
|
|
|
|
# use your version of this file under the terms of the MPL, indicate your
|
|
|
|
# decision by deleting the provisions above and replace them with the notice
|
|
|
|
# and other provisions required by the GPL or the LGPL. If you do not delete
|
|
|
|
# the provisions above, a recipient may use your version of this file under
|
|
|
|
# the terms of any one of the MPL, the GPL or the LGPL.
|
|
|
|
#
|
|
|
|
# ***** END LICENSE BLOCK *****
|
|
|
|
|
2007-09-17 19:47:34 -07:00
|
|
|
# Required Plugins:
|
2007-03-22 10:30:00 -07:00
|
|
|
# ShellLink plugin http://nsis.sourceforge.net/ShellLink_plug-in
|
|
|
|
|
|
|
|
; Set verbosity to 3 (e.g. no script) to lessen the noise in the build logs
|
|
|
|
!verbose 3
|
|
|
|
|
|
|
|
; 7-Zip provides better compression than the lzma from NSIS so we add the files
|
|
|
|
; uncompressed and use 7-Zip to create a SFX archive of it
|
|
|
|
SetDatablockOptimize on
|
|
|
|
SetCompress off
|
|
|
|
CRCCheck on
|
|
|
|
|
|
|
|
!addplugindir ./
|
|
|
|
|
|
|
|
; prevents compiling of the reg write logging.
|
|
|
|
!define NO_LOG
|
|
|
|
|
|
|
|
Var TmpVal
|
|
|
|
|
|
|
|
; Other included files may depend upon these includes!
|
|
|
|
; The following includes are provided by NSIS.
|
|
|
|
!include FileFunc.nsh
|
|
|
|
!include LogicLib.nsh
|
|
|
|
!include TextFunc.nsh
|
|
|
|
!include WinMessages.nsh
|
|
|
|
!include WordFunc.nsh
|
|
|
|
!include MUI.nsh
|
|
|
|
|
2007-09-17 19:47:34 -07:00
|
|
|
; WinVer.nsh was added in the same release that RequestExecutionLevel so check
|
|
|
|
; if ___WINVER__NSH___ is defined to determine if RequestExecutionLevel is
|
|
|
|
; available.
|
|
|
|
!include /NONFATAL WinVer.nsh
|
|
|
|
!ifdef ___WINVER__NSH___
|
|
|
|
RequestExecutionLevel admin
|
|
|
|
!else
|
|
|
|
!warning "Uninstaller will be created without Vista compatibility.$\n \
|
|
|
|
Upgrade your NSIS installation to at least version 2.22 to resolve."
|
|
|
|
!endif
|
|
|
|
|
2007-03-22 10:30:00 -07:00
|
|
|
!insertmacro StrFilter
|
|
|
|
!insertmacro WordFind
|
|
|
|
!insertmacro WordReplace
|
|
|
|
|
2007-09-17 19:47:34 -07:00
|
|
|
!insertmacro un.GetParent
|
2007-03-22 10:30:00 -07:00
|
|
|
!insertmacro un.LineFind
|
|
|
|
!insertmacro un.TrimNewLines
|
|
|
|
|
|
|
|
; The following includes are custom.
|
|
|
|
!include branding.nsi
|
|
|
|
!include defines.nsi
|
|
|
|
!include common.nsh
|
|
|
|
!include locales.nsi
|
|
|
|
!include version.nsh
|
|
|
|
|
|
|
|
; This is named BrandShortName helper because we use this for software update
|
|
|
|
; post update cleanup.
|
|
|
|
VIAddVersionKey "FileDescription" "${BrandShortName} Helper"
|
|
|
|
|
|
|
|
!insertmacro AddHandlerValues
|
2007-07-17 11:11:18 -07:00
|
|
|
!insertmacro CleanVirtualStore
|
2007-09-17 19:47:34 -07:00
|
|
|
!insertmacro GetLongPath
|
2007-03-22 10:30:00 -07:00
|
|
|
!insertmacro RegCleanMain
|
|
|
|
!insertmacro RegCleanUninstall
|
|
|
|
!insertmacro WriteRegDWORD2
|
2007-09-17 19:47:34 -07:00
|
|
|
!insertmacro WriteRegStr2
|
2007-07-31 11:51:58 -07:00
|
|
|
|
2007-07-17 11:11:18 -07:00
|
|
|
!insertmacro un.CleanVirtualStore
|
2007-09-17 19:47:34 -07:00
|
|
|
!insertmacro un.GetLongPath
|
2007-03-22 10:30:00 -07:00
|
|
|
!insertmacro un.GetSecondInstallPath
|
2007-09-21 15:09:04 -07:00
|
|
|
!insertmacro un.ManualCloseAppPrompt
|
2007-09-17 19:47:34 -07:00
|
|
|
!insertmacro un.ParseUninstallLog
|
|
|
|
!insertmacro un.RegCleanMain
|
|
|
|
!insertmacro un.RegCleanUninstall
|
|
|
|
!insertmacro un.RemoveQuotesFromPath
|
2007-03-22 10:30:00 -07:00
|
|
|
|
|
|
|
!include shared.nsh
|
|
|
|
|
2007-09-17 19:47:34 -07:00
|
|
|
; Helper macros for ui callbacks. Insert these after shared.nsh
|
|
|
|
!insertmacro UninstallOnInitCommon
|
|
|
|
|
2007-03-22 10:30:00 -07:00
|
|
|
Name "${BrandFullName}"
|
|
|
|
OutFile "helper.exe"
|
|
|
|
InstallDirRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${BrandFullNameInternal} (${AppVersion})" "InstallLocation"
|
|
|
|
InstallDir "$PROGRAMFILES\${BrandFullName}"
|
|
|
|
ShowUnInstDetails nevershow
|
|
|
|
|
|
|
|
################################################################################
|
|
|
|
# Modern User Interface - MUI
|
|
|
|
|
|
|
|
!define MUI_ABORTWARNING
|
|
|
|
!define MUI_ICON setup.ico
|
|
|
|
!define MUI_UNICON setup.ico
|
|
|
|
!define MUI_WELCOMEPAGE_TITLE_3LINES
|
|
|
|
!define MUI_HEADERIMAGE
|
|
|
|
!define MUI_HEADERIMAGE_RIGHT
|
|
|
|
!define MUI_UNWELCOMEFINISHPAGE_BITMAP wizWatermark.bmp
|
|
|
|
|
|
|
|
; Use a right to left header image when the language is right to left
|
|
|
|
!ifdef ${AB_CD}_rtl
|
|
|
|
!define MUI_HEADERIMAGE_BITMAP_RTL wizHeaderRTL.bmp
|
|
|
|
!else
|
|
|
|
!define MUI_HEADERIMAGE_BITMAP wizHeader.bmp
|
|
|
|
!endif
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Uninstall Pages
|
|
|
|
*/
|
|
|
|
; Welcome Page
|
|
|
|
!insertmacro MUI_UNPAGE_WELCOME
|
|
|
|
|
|
|
|
; Uninstall Confirm Page
|
2007-09-21 15:09:04 -07:00
|
|
|
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE un.leaveConfirm
|
2007-03-22 10:30:00 -07:00
|
|
|
!insertmacro MUI_UNPAGE_CONFIRM
|
|
|
|
|
|
|
|
; Remove Files Page
|
|
|
|
!insertmacro MUI_UNPAGE_INSTFILES
|
|
|
|
|
|
|
|
; Finish Page
|
|
|
|
!define MUI_PAGE_CUSTOMFUNCTION_PRE un.preFinish
|
|
|
|
!define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED
|
|
|
|
!define MUI_FINISHPAGE_SHOWREADME ""
|
|
|
|
|
|
|
|
; Setup the survey controls, functions, etc. except when the application has
|
|
|
|
; defined NO_UNINSTALL_SURVEY
|
|
|
|
!ifndef NO_UNINSTALL_SURVEY
|
|
|
|
!define MUI_FINISHPAGE_SHOWREADME_TEXT $(SURVEY_TEXT)
|
|
|
|
!define MUI_FINISHPAGE_SHOWREADME_FUNCTION un.Survey
|
|
|
|
!endif
|
|
|
|
|
|
|
|
!insertmacro MUI_UNPAGE_FINISH
|
|
|
|
|
|
|
|
################################################################################
|
|
|
|
# Install Sections
|
|
|
|
; Empty section required for the installer to compile as an uninstaller
|
|
|
|
Section ""
|
|
|
|
SectionEnd
|
|
|
|
|
|
|
|
################################################################################
|
|
|
|
# Uninstall Sections
|
|
|
|
|
|
|
|
Section "Uninstall"
|
|
|
|
SetDetailsPrint textonly
|
|
|
|
DetailPrint $(STATUS_UNINSTALL_MAIN)
|
|
|
|
SetDetailsPrint none
|
2007-09-17 19:47:34 -07:00
|
|
|
|
2007-09-21 15:09:04 -07:00
|
|
|
; Delete the app exe to prevent launching the app while we are uninstalling.
|
|
|
|
ClearErrors
|
|
|
|
${DeleteFile} "$INSTDIR\${FileMainEXE}"
|
|
|
|
${If} ${Errors}
|
|
|
|
; If the user closed the application it can take several seconds for it to
|
|
|
|
; shut down completely. If the application is being used by another user we
|
|
|
|
; can still delete the files when the system is restarted.
|
|
|
|
Sleep 5000
|
|
|
|
${DeleteFile} "$INSTDIR\${FileMainEXE}"
|
|
|
|
ClearErrors
|
|
|
|
${EndIf}
|
|
|
|
|
2007-03-22 10:30:00 -07:00
|
|
|
; Remove registry entries for non-existent apps and for apps that point to our
|
2007-09-17 19:47:34 -07:00
|
|
|
; install location in the Software\Mozilla key and uninstall registry entries
|
|
|
|
; that point to our install location for both HKCU and HKLM.
|
2007-03-22 10:30:00 -07:00
|
|
|
SetShellVarContext current ; Sets SHCTX to HKCU
|
|
|
|
${un.RegCleanMain} "Software\Mozilla"
|
2007-09-17 19:47:34 -07:00
|
|
|
${un.RegCleanUninstall}
|
|
|
|
|
2007-03-22 10:30:00 -07:00
|
|
|
SetShellVarContext all ; Sets SHCTX to HKLM
|
|
|
|
${un.RegCleanMain} "Software\Mozilla"
|
|
|
|
${un.RegCleanUninstall}
|
|
|
|
|
|
|
|
SetShellVarContext all ; Set SHCTX to HKLM
|
|
|
|
${un.GetSecondInstallPath} "Software\Mozilla" $R9
|
|
|
|
${If} $R9 == "false"
|
|
|
|
SetShellVarContext current ; Set SHCTX to HKCU
|
|
|
|
${un.GetSecondInstallPath} "Software\Mozilla" $R9
|
|
|
|
${EndIf}
|
|
|
|
|
|
|
|
StrCpy $0 "Software\Clients\StartMenuInternet\${FileMainEXE}\shell\open\command"
|
2007-09-17 19:47:34 -07:00
|
|
|
ReadRegStr $R1 HKLM "$0" ""
|
|
|
|
${un.RemoveQuotesFromPath} "$R1" $R1
|
|
|
|
${un.GetParent} "$R1" $R1
|
2007-03-22 10:30:00 -07:00
|
|
|
|
|
|
|
; Only remove the StartMenuInternet key if it refers to this install location.
|
|
|
|
; The StartMenuInternet registry key is independent of the default browser
|
|
|
|
; settings. The XPInstall base un-installer always removes this key if it is
|
|
|
|
; uninstalling the default browser and it will always replace the keys when
|
|
|
|
; installing even if there is another install of Firefox that is set as the
|
|
|
|
; default browser. Now the key is always updated on install but it is only
|
|
|
|
; removed if it refers to this install location.
|
|
|
|
${If} "$INSTDIR" == "$R1"
|
|
|
|
; XXXrstrong - if there is another installation of the same app ideally we
|
|
|
|
; would just modify these values. The GetSecondInstallPath macro could be
|
|
|
|
; made to provide enough information to do this.
|
|
|
|
DeleteRegKey HKLM "Software\Clients\StartMenuInternet\${FileMainEXE}"
|
|
|
|
DeleteRegValue HKLM "Software\RegisteredApplications" "${AppRegName}"
|
|
|
|
${EndIf}
|
|
|
|
|
|
|
|
StrCpy $0 "Software\Microsoft\Windows\CurrentVersion\App Paths\${FileMainEXE}"
|
|
|
|
${If} $R9 == "false"
|
|
|
|
DeleteRegKey HKLM "$0"
|
|
|
|
DeleteRegKey HKCU "$0"
|
|
|
|
StrCpy $0 "Software\Microsoft\MediaPlayer\ShimInclusionList\${FileMainEXE}"
|
|
|
|
DeleteRegKey HKLM "$0"
|
|
|
|
DeleteRegKey HKCU "$0"
|
|
|
|
StrCpy $0 "MIME\Database\Content Type\application/x-xpinstall;app=firefox"
|
|
|
|
DeleteRegKey HKCR "$0"
|
|
|
|
${Else}
|
2007-09-17 19:47:34 -07:00
|
|
|
ReadRegStr $R1 HKLM "$0" ""
|
|
|
|
${un.RemoveQuotesFromPath} "$R1" $R1
|
|
|
|
${un.GetParent} "$R1" $R1
|
2007-03-22 10:30:00 -07:00
|
|
|
${If} "$INSTDIR" == "$R1"
|
|
|
|
WriteRegStr HKLM "$0" "" "$R9"
|
2007-09-17 19:47:34 -07:00
|
|
|
${un.GetParent} "$R9" $R1
|
2007-03-22 10:30:00 -07:00
|
|
|
WriteRegStr HKLM "$0" "Path" "$R1"
|
|
|
|
${EndIf}
|
|
|
|
${EndIf}
|
|
|
|
|
2007-09-21 15:09:04 -07:00
|
|
|
; Remove directories and files we always control before parsing the uninstall
|
|
|
|
; log so empty directories can be removed.
|
|
|
|
${If} ${FileExists} "$INSTDIR\updates"
|
|
|
|
RmDir /r /REBOOTOK "$INSTDIR\updates"
|
|
|
|
${EndIf}
|
|
|
|
${If} ${FileExists} "$INSTDIR\defaults\shortcuts"
|
|
|
|
RmDir /r /REBOOTOK "$INSTDIR\defaults\shortcuts"
|
|
|
|
${EndIf}
|
|
|
|
${If} ${FileExists} "$INSTDIR\distribution"
|
|
|
|
RmDir /r /REBOOTOK "$INSTDIR\distribution"
|
|
|
|
${EndIf}
|
|
|
|
${If} ${FileExists} "$INSTDIR\removed-files"
|
|
|
|
Delete /REBOOTOK "$INSTDIR\removed-files"
|
|
|
|
${EndIf}
|
2007-03-22 10:30:00 -07:00
|
|
|
|
2007-09-17 19:47:34 -07:00
|
|
|
; Parse the uninstall log to unregister dll's and remove all installed
|
|
|
|
; files / directories this install is responsible for.
|
|
|
|
${un.ParseUninstallLog}
|
2007-03-22 10:30:00 -07:00
|
|
|
|
2007-09-17 19:47:34 -07:00
|
|
|
; Remove the uninstall directory that we control
|
2007-09-21 15:09:04 -07:00
|
|
|
RmDir /r /REBOOTOK "$INSTDIR\uninstall"
|
2007-03-22 10:30:00 -07:00
|
|
|
|
2007-09-17 19:47:34 -07:00
|
|
|
; Remove the installation directory if it is empty
|
|
|
|
${RemoveDir} "$INSTDIR"
|
2007-03-22 10:30:00 -07:00
|
|
|
|
2007-07-17 11:11:18 -07:00
|
|
|
; Remove files that may be left behind by the application in the
|
|
|
|
; VirtualStore directory.
|
|
|
|
${un.CleanVirtualStore}
|
|
|
|
|
2007-09-21 15:09:04 -07:00
|
|
|
; If firefox.exe was successfully deleted yet we still need to restart to
|
|
|
|
; remove other files create a dummy firefox.exe.moz-delete to prevent the
|
|
|
|
; installer from allowing an install without restart when it is required
|
|
|
|
; to complete an uninstall.
|
|
|
|
${If} ${RebootFlag}
|
|
|
|
${Unless} ${FileExists} "$INSTDIR\${FileMainEXE}.moz-delete"
|
|
|
|
FileOpen $0 "$INSTDIR\${FileMainEXE}.moz-delete" w
|
|
|
|
FileWrite $0 "Will be deleted on restart"
|
|
|
|
Delete /REBOOTOK "$INSTDIR\${FileMainEXE}.moz-delete"
|
|
|
|
FileClose $0
|
|
|
|
${EndUnless}
|
|
|
|
${EndIf}
|
|
|
|
|
2007-03-22 10:30:00 -07:00
|
|
|
; Refresh desktop icons otherwise the start menu internet item won't be
|
2007-09-17 19:47:34 -07:00
|
|
|
; removed and other ugly things will happen like recreation of the app's
|
|
|
|
; clients registry key by the OS under some conditions.
|
2007-03-22 10:30:00 -07:00
|
|
|
System::Call "shell32::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)"
|
|
|
|
SectionEnd
|
|
|
|
|
|
|
|
################################################################################
|
|
|
|
# Helper Functions
|
|
|
|
|
|
|
|
; Setup the survey controls, functions, etc. except when the application has
|
|
|
|
; defined NO_UNINSTALL_SURVEY
|
|
|
|
!ifndef NO_UNINSTALL_SURVEY
|
|
|
|
Function un.Survey
|
|
|
|
Exec "$\"$TmpVal$\" $\"${SurveyURL}$\""
|
|
|
|
FunctionEnd
|
|
|
|
!endif
|
|
|
|
|
|
|
|
################################################################################
|
|
|
|
# Language
|
|
|
|
|
|
|
|
!insertmacro MOZ_MUI_LANGUAGE 'baseLocale'
|
|
|
|
!verbose push
|
|
|
|
!verbose 3
|
|
|
|
!include "overrideLocale.nsh"
|
|
|
|
!include "customLocale.nsh"
|
|
|
|
!verbose pop
|
|
|
|
|
|
|
|
; Set this after the locale files to override it if it is in the locale. Using
|
|
|
|
; " " for BrandingText will hide the "Nullsoft Install System..." branding.
|
|
|
|
BrandingText " "
|
|
|
|
|
|
|
|
################################################################################
|
|
|
|
# Page pre and leave functions
|
|
|
|
|
|
|
|
; Checks if the app being uninstalled is running.
|
2007-09-21 15:09:04 -07:00
|
|
|
Function un.leaveConfirm
|
|
|
|
; Try to delete the app executable and if we can't delete it try to find the
|
|
|
|
; app's message window and prompt the user to close the app. This allows
|
|
|
|
; running an instance that is located in another directory. If for whatever
|
|
|
|
; reason there is no message window we will just rename the app's files and
|
|
|
|
; then remove them on restart if they are in use.
|
|
|
|
StrCpy $TmpVal ""
|
2007-03-22 10:30:00 -07:00
|
|
|
ClearErrors
|
2007-09-21 15:09:04 -07:00
|
|
|
${DeleteFile} "$INSTDIR\${FileMainEXE}"
|
2007-03-22 10:30:00 -07:00
|
|
|
${If} ${Errors}
|
2007-09-21 15:09:04 -07:00
|
|
|
${un.ManualCloseAppPrompt} "${WindowClass}" "$(WARN_MANUALLY_CLOSE_APP_UNINSTALL)"
|
2007-03-22 10:30:00 -07:00
|
|
|
${EndIf}
|
|
|
|
FunctionEnd
|
|
|
|
|
|
|
|
Function un.preFinish
|
2007-09-21 15:09:04 -07:00
|
|
|
; Do not modify the finish page if there is a reboot pending
|
|
|
|
${Unless} ${RebootFlag}
|
|
|
|
!ifdef NO_UNINSTALL_SURVEY
|
2007-03-22 10:30:00 -07:00
|
|
|
!insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "settings" "NumFields" "3"
|
2007-09-21 15:09:04 -07:00
|
|
|
!else
|
|
|
|
; Setup the survey controls, functions, etc.
|
2007-03-22 10:30:00 -07:00
|
|
|
StrCpy $TmpVal "SOFTWARE\Microsoft\IE Setup\Setup"
|
|
|
|
ClearErrors
|
|
|
|
ReadRegStr $0 HKLM $TmpVal "Path"
|
|
|
|
${If} ${Errors}
|
|
|
|
!insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "settings" "NumFields" "3"
|
|
|
|
${Else}
|
|
|
|
ExpandEnvStrings $0 "$0" ; this value will usually contain %programfiles%
|
|
|
|
${If} $0 != "\"
|
|
|
|
StrCpy $0 "$0\"
|
|
|
|
${EndIf}
|
|
|
|
StrCpy $0 "$0\iexplore.exe"
|
|
|
|
ClearErrors
|
|
|
|
GetFullPathName $TmpVal $0
|
|
|
|
${If} ${Errors}
|
|
|
|
!insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "settings" "NumFields" "3"
|
2007-09-21 15:09:04 -07:00
|
|
|
${Else}
|
|
|
|
; When we add an optional action to the finish page the cancel button
|
|
|
|
; is enabled. This disables it and leaves the finish button as the
|
|
|
|
; only choice.
|
|
|
|
!insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "settings" "cancelenabled" "0"
|
2007-03-22 10:30:00 -07:00
|
|
|
${EndIf}
|
|
|
|
${EndIf}
|
2007-09-21 15:09:04 -07:00
|
|
|
!endif
|
|
|
|
${EndUnless}
|
2007-03-22 10:30:00 -07:00
|
|
|
FunctionEnd
|
|
|
|
|
|
|
|
################################################################################
|
|
|
|
# Initialization Functions
|
|
|
|
Function .onInit
|
2007-09-17 19:47:34 -07:00
|
|
|
${UninstallOnInitCommon}
|
2007-03-22 10:30:00 -07:00
|
|
|
FunctionEnd
|
|
|
|
|
|
|
|
Function un.onInit
|
|
|
|
GetFullPathName $INSTDIR "$INSTDIR\.."
|
2007-09-17 19:47:34 -07:00
|
|
|
${un.GetLongPath} "$INSTDIR" $INSTDIR
|
2007-03-22 10:30:00 -07:00
|
|
|
${Unless} ${FileExists} "$INSTDIR\${FileMainEXE}"
|
|
|
|
Abort
|
|
|
|
${EndUnless}
|
|
|
|
StrCpy $LANGUAGE 0
|
|
|
|
FunctionEnd
|