mirror of
https://github.com/chibicitiberiu/rainmeter-studio.git
synced 2024-02-24 04:33:31 +00:00
Updated installer UI and language files
This commit is contained in:
@ -22,6 +22,7 @@ BrandingText " "
|
||||
SetCompressor /SOLID lzma
|
||||
RequestExecutionLevel user
|
||||
InstallDirRegKey HKLM "SOFTWARE\Rainmeter" ""
|
||||
ShowInstDetails nevershow
|
||||
XPStyle on
|
||||
OutFile "..\${OUTFILE}"
|
||||
ReserveFile "${NSISDIR}\Plugins\LangDLL.dll"
|
||||
@ -36,7 +37,10 @@ ReserveFile ".\UAC.dll"
|
||||
!include "WinVer.nsh"
|
||||
!include "UAC.nsh"
|
||||
|
||||
; Additional Windows definitions
|
||||
!define BCM_SETSHIELD 0x0000160c
|
||||
!define PF_XMMI_INSTRUCTIONS_AVAILABLE 6
|
||||
!define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10
|
||||
|
||||
!define MUI_HEADERIMAGE
|
||||
!define MUI_ICON ".\Icon.ico"
|
||||
@ -46,13 +50,10 @@ ReserveFile ".\UAC.dll"
|
||||
!define MUI_WELCOMEFINISHPAGE_BITMAP ".\Wizard.bmp"
|
||||
!define MUI_FINISHPAGE_RUN
|
||||
!define MUI_FINISHPAGE_RUN_FUNCTION FinishRun
|
||||
!define MUI_WELCOMEPAGE ; For language strings
|
||||
|
||||
!define MUI_PAGE_CUSTOMFUNCTION_SHOW PageWelcomeOnShow
|
||||
!insertmacro MUI_PAGE_WELCOME
|
||||
Page custom PageWelcome PageWelcomeOnLeave
|
||||
Page custom PageOptions PageOptionsOnLeave
|
||||
!define MUI_PAGE_CUSTOMFUNCTION_SHOW PageDirectoryOnShow
|
||||
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE PageDirectoryOnLeave
|
||||
!insertmacro MUI_PAGE_DIRECTORY
|
||||
!insertmacro MUI_PAGE_INSTFILES
|
||||
!insertmacro MUI_PAGE_FINISH
|
||||
|
||||
@ -102,18 +103,11 @@ UninstPage custom un.PageOptions un.GetOptions
|
||||
!define ERROR_NOVCREDIST 6
|
||||
!define ERROR_CLOSEFAIL 7
|
||||
|
||||
Var ctlDesktop
|
||||
Var ctlStartup
|
||||
Var ctlAllUsers
|
||||
Var ctlDelete
|
||||
Var ctlStandard
|
||||
Var ctlPortable
|
||||
Var ctlBit32
|
||||
Var ctlBit64
|
||||
Var instArc
|
||||
Var instType
|
||||
Var defLang
|
||||
|
||||
Var NonDefaultLanguage
|
||||
Var AutoStartup
|
||||
Var Install64Bit
|
||||
Var InstallPortable
|
||||
Var un.DeleteAll
|
||||
|
||||
; Install
|
||||
; --------------------------------------
|
||||
@ -148,78 +142,67 @@ Function .onInit
|
||||
Quit
|
||||
${EndIf}
|
||||
|
||||
StrCpy $R0 $LANGUAGE
|
||||
StrCpy $defLang "0"
|
||||
ReadRegDWORD $0 HKLM "SOFTWARE\Rainmeter" "NonDefault"
|
||||
${If} $0 == 1
|
||||
; Rainmeter already installed and user selected non-default language last time
|
||||
ReadRegStr $0 HKLM "SOFTWARE\Rainmeter" "Language"
|
||||
ReadRegStr $0 HKLM "SOFTWARE\Rainmeter" "Language"
|
||||
ReadRegDWORD $NonDefaultLanguage HKLM "SOFTWARE\Rainmeter" "NonDefault"
|
||||
|
||||
${IfNot} ${Silent}
|
||||
${If} $0 == ""
|
||||
${OrIf} $0 != $LANGUAGE
|
||||
${AndIf} $NonDefaultLanguage != 1
|
||||
; New install or better match
|
||||
LangDLL::LangDialog "$(^SetupCaption)" "Please select the installer language.$\n$(SELECTLANGUAGE)" AC ${MUI_LANGDLL_LANGUAGES_CP} ""
|
||||
Pop $0
|
||||
${If} $0 == "cancel"
|
||||
Abort
|
||||
${EndIf}
|
||||
|
||||
${If} $0 != $LANGUAGE
|
||||
; User selected non-default language
|
||||
StrCpy $NonDefaultLanguage 1
|
||||
${EndIf}
|
||||
${EndIf}
|
||||
|
||||
StrCpy $LANGUAGE $0
|
||||
${Else}
|
||||
${If} $0 != ""
|
||||
StrCpy $LANGUAGE $0
|
||||
${EndIf}
|
||||
${EndIf}
|
||||
|
||||
${IfNot} ${Silent}
|
||||
LangDLL::LangDialog "$(^SetupCaption)" "Please select the installer language.$\n$(SELECTLANGUAGE)" AC ${MUI_LANGDLL_LANGUAGES_CP} ""
|
||||
Pop $LANGUAGE
|
||||
${If} $LANGUAGE == "cancel"
|
||||
Abort
|
||||
${EndIf}
|
||||
|
||||
${If} $LANGUAGE == $R0
|
||||
; User selected default language
|
||||
StrCpy $defLang "1"
|
||||
${EndIf}
|
||||
${Else}
|
||||
${GetParameters} $R1
|
||||
|
||||
ClearErrors
|
||||
${GetOptions} $R1 "/LANGUAGE=" $0
|
||||
${IfNot} ${Errors}
|
||||
StrCpy $LANGUAGE $0
|
||||
${EndIf}
|
||||
${If} $LANGUAGE == $R0
|
||||
; User selected default language
|
||||
StrCpy $defLang "1"
|
||||
${EndIf}
|
||||
${If} $LANGUAGE != $0
|
||||
StrCpy $NonDefaultLanguage 1
|
||||
${EndIf}
|
||||
|
||||
${GetOptions} $R1 "/DESKTOPSHORTCUT=" $0
|
||||
${If} $0 = 1
|
||||
StrCpy $ctlDesktop "1"
|
||||
StrCpy $LANGUAGE $0
|
||||
${EndIf}
|
||||
|
||||
${GetOptions} $R1 "/STARTUP=" $0
|
||||
${If} $0 = 1
|
||||
StrCpy $ctlStartup "1"
|
||||
${EndIf}
|
||||
|
||||
${GetOptions} $R1 "/ALLUSERS=" $0
|
||||
${If} $0 = 1
|
||||
StrCpy $ctlAllUsers "1"
|
||||
StrCpy $AutoStartup 1
|
||||
${EndIf}
|
||||
|
||||
${GetOptions} $R1 "/PORTABLE=" $0
|
||||
${If} $0 = 1
|
||||
StrCpy $instType "P"
|
||||
StrCpy $InstallPortable 1
|
||||
${Else}
|
||||
${IfNot} ${UAC_IsAdmin}
|
||||
SetErrorLevel ${ERROR_NOTADMIN}
|
||||
Quit
|
||||
${EndIf}
|
||||
|
||||
StrCpy $instType "S"
|
||||
${EndIf}
|
||||
|
||||
${GetOptions} $R1 "/VERSION=" $0
|
||||
${If} $0 = 64
|
||||
StrCpy $instArc "x64"
|
||||
StrCpy $Install64Bit 1
|
||||
|
||||
${If} $INSTDIR == ""
|
||||
StrCpy $INSTDIR "$PROGRAMFILES64\Rainmeter"
|
||||
${EndIf}
|
||||
${Else}
|
||||
StrCpy $instArc "x86"
|
||||
|
||||
${If} $INSTDIR == ""
|
||||
StrCpy $INSTDIR "$PROGRAMFILES\Rainmeter"
|
||||
${EndIf}
|
||||
@ -236,178 +219,243 @@ Function .onInit
|
||||
${EndIf}
|
||||
${EndIf}
|
||||
${Else}
|
||||
; Sync variables with user instance
|
||||
!insertmacro UAC_AsUser_Call Function ExchangeVars ${UAC_SYNCREGISTERS}
|
||||
StrCpy $instType "S"
|
||||
StrCpy $ctlDesktop $0
|
||||
StrCpy $ctlStartup $1
|
||||
StrCpy $ctlAllUsers $2
|
||||
StrCpy $instArc $3
|
||||
StrCpy $defLang $4
|
||||
StrCpy $LANGUAGE $5
|
||||
; Exchange settings with user instance
|
||||
!insertmacro UAC_AsUser_Call Function ExchangeSettings ${UAC_SYNCREGISTERS}
|
||||
StrCpy $AutoStartup $1
|
||||
StrCpy $Install64Bit $2
|
||||
StrCpy $NonDefaultLanguage $3
|
||||
StrCpy $LANGUAGE $4
|
||||
${EndIf}
|
||||
FunctionEnd
|
||||
|
||||
Function ExchangeVars
|
||||
StrCpy $0 $ctlDesktop
|
||||
StrCpy $1 $ctlStartup
|
||||
StrCpy $2 $ctlAllUsers
|
||||
StrCpy $3 $instArc
|
||||
StrCpy $4 $defLang
|
||||
StrCpy $5 $LANGUAGE
|
||||
Function ExchangeSettings
|
||||
StrCpy $1 $AutoStartup
|
||||
StrCpy $2 $Install64Bit
|
||||
StrCpy $3 $NonDefaultLanguage
|
||||
StrCpy $4 $LANGUAGE
|
||||
HideWindow
|
||||
FunctionEnd
|
||||
|
||||
Function PageWelcomeOnShow
|
||||
; Skip to the directory page if we're the elevated process
|
||||
Function PageWelcome
|
||||
${If} ${UAC_IsInnerInstance}
|
||||
${If} ${UAC_IsAdmin}
|
||||
SendMessage $HWNDPARENT "0x408" "2" ""
|
||||
; Skip page
|
||||
Abort
|
||||
${Else}
|
||||
MessageBox MB_OK|MB_ICONSTOP "$(ADMINERROR) (Inner)"
|
||||
Quit
|
||||
${EndIf}
|
||||
${EndIf}
|
||||
|
||||
!insertmacro MUI_HEADER_TEXT "$(INSTALLOPTIONS)" "$(^ComponentsSubText1)"
|
||||
nsDialogs::Create 1044
|
||||
Pop $0
|
||||
nsDialogs::SetRTL $(^RTL)
|
||||
SetCtlColors $0 "" "${MUI_BGCOLOR}"
|
||||
|
||||
${NSD_CreateBitmap} 0u 0u 109u 193u ""
|
||||
Pop $0
|
||||
${NSD_SetImage} $0 $PLUGINSDIR\modern-wizard.bmp $R0
|
||||
|
||||
${NSD_CreateLabel} 120u 10u 195u 38u "$(MUI_TEXT_WELCOME_INFO_TITLE)"
|
||||
Pop $0
|
||||
SetCtlColors $0 "" "${MUI_BGCOLOR}"
|
||||
CreateFont $1 "$(^Font)" "12" "700"
|
||||
SendMessage $0 ${WM_SETFONT} $1 0
|
||||
|
||||
${NSD_CreateLabel} 120u 55u 195u 12u "$(^ComponentsSubText1)"
|
||||
Pop $0
|
||||
SetCtlColors $0 "" "${MUI_BGCOLOR}"
|
||||
|
||||
${NSD_CreateRadioButton} 120u 70u 205u 12u "$(STANDARDINST)"
|
||||
Pop $R0
|
||||
SetCtlColors $R0 "" "${MUI_BGCOLOR}"
|
||||
${NSD_AddStyle} $R0 ${WS_GROUP}
|
||||
SendMessage $R0 ${WM_SETFONT} $mui.Header.Text.Font 0
|
||||
|
||||
${NSD_CreateLabel} 132u 82u 185u 24u "$(STANDARDINSTDESC)"
|
||||
Pop $0
|
||||
SetCtlColors $0 "" "${MUI_BGCOLOR}"
|
||||
|
||||
${NSD_CreateRadioButton} 120u 106u 310u 12u "$(PORTABLEINST)"
|
||||
Pop $R1
|
||||
SetCtlColors $R1 "" "${MUI_BGCOLOR}"
|
||||
${NSD_AddStyle} $R1 ${WS_TABSTOP}
|
||||
SendMessage $R1 ${WM_SETFONT} $mui.Header.Text.Font 0
|
||||
|
||||
${NSD_CreateLabel} 132u 118u 185u 52u "$(PORTABLEINSTDESC)"
|
||||
Pop $0
|
||||
SetCtlColors $0 "" "${MUI_BGCOLOR}"
|
||||
|
||||
${If} $InstallPortable == 1
|
||||
${NSD_Check} $R1
|
||||
${Else}
|
||||
${NSD_Check} $R0
|
||||
${EndIf}
|
||||
|
||||
Call muiPageLoadFullWindow
|
||||
|
||||
nsDialogs::Show
|
||||
${NSD_FreeImage} $R0
|
||||
FunctionEnd
|
||||
|
||||
Function PageWelcomeOnLeave
|
||||
${NSD_GetState} $R1 $InstallPortable
|
||||
Call muiPageUnloadFullWindow
|
||||
FunctionEnd
|
||||
|
||||
Function PageOptions
|
||||
${If} ${UAC_IsInnerInstance}
|
||||
${AndIf} ${UAC_IsAdmin}
|
||||
; Skip page
|
||||
Abort
|
||||
${EndIf}
|
||||
|
||||
!insertmacro MUI_HEADER_TEXT "$(INSTALLOPTIONS)" "$(INSTALLOPTIONSDESC)"
|
||||
nsDialogs::Create 1018
|
||||
nsDialogs::SetRTL $(^RTL)
|
||||
|
||||
${NSD_CreateRadioButton} 0 0u 310u 12u "$(STANDARDINST)"
|
||||
Pop $ctlStandard
|
||||
${NSD_AddStyle} $ctlStandard ${WS_GROUP}
|
||||
SendMessage $ctlStandard ${WM_SETFONT} $mui.Header.Text.Font 0
|
||||
${NSD_OnClick} $ctlStandard setStandard
|
||||
${NSD_CreateGroupBox} 0 0u -1u 36u "$(^DirSubText)"
|
||||
|
||||
${NSD_CreateLabel} 12u 12u 285u 12u "$(STANDARDINSTDESC)"
|
||||
${NSD_CreateDirRequest} 6u 14u 232u 14u ""
|
||||
Pop $R0
|
||||
SendMessage $R0 ${EM_SETREADONLY} 1 0
|
||||
${NSD_OnChange} $R0 PageOptionsDirectoryOnChange
|
||||
|
||||
${NSD_CreateRadioButton} 0 24u 310u 12u "$(PORTABLEINST)"
|
||||
Pop $ctlPortable
|
||||
${NSD_AddStyle} $ctlPortable ${WS_TABSTOP}
|
||||
SendMessage $ctlPortable ${WM_SETFONT} $mui.Header.Text.Font 0
|
||||
${NSD_OnClick} $ctlPortable setPortable
|
||||
${NSD_CreateBrowseButton} 242u 14u 50u 14u "$(^BrowseBtn)"
|
||||
Pop $R1
|
||||
${NSD_OnClick} $R1 PageOptionsBrowseOnClick
|
||||
|
||||
${NSD_CreateLabel} 12u 36u 285u 32u "$(PORTABLEINSTDESC)"
|
||||
|
||||
${NSD_CreateGroupBox} 0 72u 200u 54u "$(ADDITIONALOPTIONS)"
|
||||
|
||||
Push $ctlDesktop
|
||||
${NSD_CreateCheckbox} 6u 84u 190u 12u "$(DESKTOPSHORTCUT)"
|
||||
Pop $ctlDesktop
|
||||
Pop $0
|
||||
StrCmp $0 "1" 0 +2
|
||||
${NSD_Check} $ctlDesktop
|
||||
|
||||
Push $ctlAllUsers
|
||||
${NSD_CreateCheckbox} 6u 96u 190u 12u "$(ALLUSERSSHORTCUT)"
|
||||
Pop $ctlAllUsers
|
||||
Pop $0
|
||||
StrCmp $0 "1" 0 +2
|
||||
${NSD_Check} $ctlAllUsers
|
||||
|
||||
Push $ctlStartup
|
||||
${NSD_CreateCheckbox} 6u 108u 190u 12u "$(AUTOSTARTUP)"
|
||||
Pop $ctlStartup
|
||||
Pop $0
|
||||
StrCmp $0 "1" 0 +2
|
||||
${NSD_Check} $ctlStartup
|
||||
|
||||
${NSD_CreateGroupBox} 205u 72u 94u 40u "$(RAINMETERVERSION)"
|
||||
|
||||
${NSD_CreateRadioButton} 211u 82u 80u 12u "$(32BIT)"
|
||||
Pop $ctlBit32
|
||||
${NSD_AddStyle} $ctlBit32 ${WS_GROUP}
|
||||
|
||||
${NSD_CreateRadioButton} 211u 94u 80u 12u "$(64BIT)"
|
||||
Pop $ctlBit64
|
||||
|
||||
ReadRegStr $0 HKLM "Software\Rainmeter" ""
|
||||
${If} $0 == ""
|
||||
${NSD_Check} $ctlStartup
|
||||
${NSD_Check} $ctlAllUsers
|
||||
; Set default directory
|
||||
${If} $InstallPortable == 1
|
||||
${GetRoot} "$WINDIR" $0
|
||||
${NSD_SetText} $R0 "$0\Rainmeter"
|
||||
${ElseIf} $INSTDIR != ""
|
||||
; Disable Browse button if already installed
|
||||
EnableWindow $R1 0
|
||||
${NSD_SetText} $R0 "$INSTDIR"
|
||||
${Else}
|
||||
SetShellVarContext all
|
||||
Call GetEnvPaths
|
||||
StrCpy $R1 $1
|
||||
StrCpy $R2 $2
|
||||
StrCpy $R3 $3
|
||||
SetShellVarContext current
|
||||
!insertmacro UAC_AsUser_Call Function GetEnvPaths ${UAC_SYNCREGISTERS}
|
||||
|
||||
${If} ${FileExists} "$R1\Rainmeter\Rainmeter.lnk"
|
||||
${NSD_Check} $ctlAllUsers
|
||||
${EndIf}
|
||||
${If} ${FileExists} "$R2\Rainmeter.lnk"
|
||||
${OrIf} ${FileExists} "$2\Rainmeter.lnk"
|
||||
${NSD_Check} $ctlStartup
|
||||
${EndIf}
|
||||
${If} ${FileExists} "$R3\Rainmeter.lnk"
|
||||
${OrIf} ${FileExists} "$3\Rainmeter.lnk"
|
||||
${NSD_Check} $ctlDesktop
|
||||
; Fresh install
|
||||
${If} ${RunningX64}
|
||||
${NSD_SetText} $R0 "$PROGRAMFILES64\Rainmeter"
|
||||
${NSD_Check} $R2
|
||||
${Else}
|
||||
${NSD_SetText} $R0 "$PROGRAMFILES\Rainmeter"
|
||||
${EndIf}
|
||||
${EndIf}
|
||||
|
||||
${If} $instType == "P"
|
||||
${NSD_Check} $ctlPortable
|
||||
Call SetPortable
|
||||
StrCpy $1 0
|
||||
|
||||
${If} ${RunningX64}
|
||||
${AndIf} $InstallPortable == 1
|
||||
${OrIf} $INSTDIR == ""
|
||||
${NSD_CreateCheckBox} 6u 54u 285u 12u "$(INSTALL64BIT)"
|
||||
Pop $R2
|
||||
StrCpy $1 30u
|
||||
${Else}
|
||||
Call SetStandard
|
||||
${NSD_Check} $ctlStandard
|
||||
StrCpy $R2 0
|
||||
${EndIf}
|
||||
|
||||
${If} $InstallPortable != 1
|
||||
${If} $1 == 0
|
||||
StrCpy $0 54u
|
||||
StrCpy $1 30u
|
||||
${Else}
|
||||
StrCpy $0 66u
|
||||
StrCpy $1 42u
|
||||
${EndIf}
|
||||
|
||||
${NSD_CreateCheckbox} 6u $0 285u 12u "$(AUTOSTARTUP)"
|
||||
Pop $R3
|
||||
|
||||
${If} $INSTDIR == ""
|
||||
${NSD_Check} $R3
|
||||
${Else}
|
||||
SetShellVarContext all
|
||||
${If} ${FileExists} "$SMSTARTUP\Rainmeter.lnk"
|
||||
${NSD_Check} $R3
|
||||
${EndIf}
|
||||
|
||||
SetShellVarContext current
|
||||
${If} ${FileExists} "$SMSTARTUP\Rainmeter.lnk"
|
||||
${NSD_Check} $R3
|
||||
${EndIf}
|
||||
${EndIf}
|
||||
${Else}
|
||||
StrCpy $R3 0
|
||||
${EndIf}
|
||||
|
||||
${If} $1 != 0
|
||||
${NSD_CreateGroupBox} 0 42u -1u $1 "$(ADDITIONALOPTIONS)"
|
||||
${EndIf}
|
||||
|
||||
; Change 'Next' to 'Install' if directory page will be skipped
|
||||
GetDlgItem $0 $HWNDPARENT 1
|
||||
${If} $INSTDIR != ""
|
||||
${NSD_SetText} $0 "$(^InstallBtn)"
|
||||
${EndIf}
|
||||
|
||||
; Show UAC shield on Install button if required
|
||||
${If} $InstallPortable == 1
|
||||
SendMessage $0 ${BCM_SETSHIELD} 0 0
|
||||
${Else}
|
||||
SendMessage $0 ${BCM_SETSHIELD} 0 1
|
||||
|
||||
; Hide Back button
|
||||
GetDlgItem $0 $HWNDPARENT 3
|
||||
ShowWindow $0 ${SW_HIDE}
|
||||
${EndIf}
|
||||
|
||||
nsDialogs::Show
|
||||
FunctionEnd
|
||||
|
||||
Function SetStandard
|
||||
EnableWindow $ctlDesktop 1
|
||||
EnableWindow $ctlAllUsers 1
|
||||
EnableWindow $ctlStartup 1
|
||||
Function PageOptionsDirectoryOnChange
|
||||
${NSD_GetText} $R0 $0
|
||||
|
||||
StrCpy $Install64Bit 0
|
||||
${If} ${RunningX64}
|
||||
${If} ${FileExists} "$INSTDIR\Rainmeter.exe"
|
||||
MoreInfo::GetProductVersion "$INSTDIR\Rainmeter.exe"
|
||||
${If} ${FileExists} "$0\Rainmeter.exe"
|
||||
MoreInfo::GetProductVersion "$0\Rainmeter.exe"
|
||||
Pop $0
|
||||
StrCpy $0 $0 2 -7
|
||||
${If} $0 == 64
|
||||
StrCpy $Install64Bit 1
|
||||
${EndIf}
|
||||
|
||||
${If} $0 == "32"
|
||||
${NSD_Check} $ctlBit32
|
||||
${NSD_UnCheck} $ctlBit64
|
||||
EnableWindow $ctlBit64 0
|
||||
${Else}
|
||||
${NSD_Check} $ctlBit64
|
||||
${NSD_UnCheck} $ctlBit32
|
||||
EnableWindow $ctlBit32 0
|
||||
${If} $InstallPortable == 1
|
||||
${NSD_SetState} $R3 $Install64Bit
|
||||
EnableWindow $R3 0
|
||||
${EndIf}
|
||||
${Else}
|
||||
${NSD_Check} $ctlBit64
|
||||
${If} $InstallPortable == 1
|
||||
EnableWindow $R3 1
|
||||
${EndIf}
|
||||
${EndIf}
|
||||
${Else}
|
||||
${NSD_Check} $ctlBit32
|
||||
${NSD_UnCheck} $ctlBit64
|
||||
EnableWindow $ctlBit64 0
|
||||
${EndIf}
|
||||
|
||||
${IfNot} ${UAC_IsAdmin}
|
||||
GetDlgItem $0 $HWNDPARENT 1
|
||||
SendMessage $0 ${BCM_SETSHIELD} 0 1
|
||||
${EndIf}
|
||||
FunctionEnd
|
||||
|
||||
Function SetPortable
|
||||
EnableWindow $ctlDesktop 0
|
||||
EnableWindow $ctlAllUsers 0
|
||||
EnableWindow $ctlStartup 0
|
||||
EnableWindow $ctlBit32 1
|
||||
Function PageOptionsBrowseOnClick
|
||||
${NSD_GetText} $R0 $0
|
||||
nsDialogs::SelectFolderDialog "$(^DirBrowseText)" $0
|
||||
Pop $1
|
||||
|
||||
${If} ${RunningX64}
|
||||
EnableWindow $ctlBit64 1
|
||||
${Endif}
|
||||
${If} $1 != error
|
||||
${If} $InstallPortable == 1
|
||||
ClearErrors
|
||||
CreateDirectory "$1"
|
||||
WriteINIStr "$1\writetest~.rm" "1" "1" "1"
|
||||
|
||||
${IfNot} ${UAC_IsAdmin}
|
||||
GetDlgItem $0 $HWNDPARENT 1
|
||||
SendMessage $0 ${BCM_SETSHIELD} 0 0
|
||||
${If} ${Errors}
|
||||
MessageBox MB_OK|MB_ICONEXCLAMATION "$(WRITEERROR)"
|
||||
${Else}
|
||||
${NSD_SetText} $R0 $1
|
||||
${EndIf}
|
||||
|
||||
Delete "$0\writetest~.rm"
|
||||
RMDir "$0"
|
||||
${Else}
|
||||
${NSD_SetText} $R0 $1
|
||||
${EndIf}
|
||||
${EndIf}
|
||||
FunctionEnd
|
||||
|
||||
@ -415,25 +463,17 @@ Function PageOptionsOnLeave
|
||||
GetDlgItem $0 $HWNDPARENT 1
|
||||
EnableWindow $0 0
|
||||
|
||||
${NSD_GetState} $ctlDesktop $ctlDesktop
|
||||
${NSD_GetState} $ctlStartup $ctlStartup
|
||||
${NSD_GetState} $ctlAllUsers $ctlAllUsers
|
||||
|
||||
${NSD_GetState} $ctlStandard $0
|
||||
${If} $0 == ${BST_CHECKED}
|
||||
StrCpy $instType "S"
|
||||
${Else}
|
||||
StrCpy $instType "P"
|
||||
${If} $R2 != 0
|
||||
${NSD_GetState} $R2 $Install64Bit
|
||||
${EndIf}
|
||||
|
||||
${NSD_GetState} $ctlBit32 $0
|
||||
${If} $0 == ${BST_CHECKED}
|
||||
StrCpy $instArc "x86"
|
||||
${Else}
|
||||
StrCpy $instArc "x64"
|
||||
${If} $R3 != 0
|
||||
${NSD_GetState} $R3 $AutoStartup
|
||||
${EndIf}
|
||||
|
||||
${If} $instType == "S"
|
||||
${NSD_GetText} $R0 $INSTDIR
|
||||
|
||||
${If} $InstallPortable != 1
|
||||
${IfNot} ${UAC_IsAdmin}
|
||||
; UAC_IsAdmin seems to return incorrect result sometimes. Recheck with UserInfo::GetAccountType to be sure.
|
||||
UserInfo::GetAccountType
|
||||
@ -462,49 +502,6 @@ UAC_TryAgain:
|
||||
${EndIf}
|
||||
FunctionEnd
|
||||
|
||||
Function PageDirectoryOnShow
|
||||
${If} $instType == "P"
|
||||
${GetRoot} "$WINDIR" $0
|
||||
${NSD_SetText} $mui.DirectoryPage.Directory "$0\Rainmeter"
|
||||
${Else}
|
||||
${If} $INSTDIR == ""
|
||||
; Fresh install
|
||||
${If} $instArc == "x86"
|
||||
${If} ${RunningX64}
|
||||
${NSD_SetText} $mui.DirectoryPage.Directory "$PROGRAMFILES32\Rainmeter"
|
||||
${Else}
|
||||
${NSD_SetText} $mui.DirectoryPage.Directory "$PROGRAMFILES\Rainmeter"
|
||||
${EndIf}
|
||||
${Else}
|
||||
${NSD_SetText} $mui.DirectoryPage.Directory "$PROGRAMFILES64\Rainmeter"
|
||||
${EndIf}
|
||||
${Else}
|
||||
; Upgrade install
|
||||
EnableWindow $mui.DirectoryPage.Directory 0
|
||||
EnableWindow $mui.DirectoryPage.BrowseButton 0
|
||||
|
||||
; Set focus on the Install button
|
||||
GetDlgItem $0 $HWNDPARENT 1
|
||||
System::Call "user32::SetFocus(i$0)"
|
||||
${EndIf}
|
||||
${EndIf}
|
||||
FunctionEnd
|
||||
|
||||
Function PageDirectoryOnLeave
|
||||
${If} $instType == "P"
|
||||
ClearErrors
|
||||
CreateDirectory "$INSTDIR"
|
||||
WriteINIStr "$INSTDIR\_rainmeter_writetest.tmp" "1" "1" "1"
|
||||
|
||||
${If} ${Errors}
|
||||
MessageBox MB_OK|MB_ICONEXCLAMATION "$(WRITEERROR)"
|
||||
Abort
|
||||
${EndIf}
|
||||
|
||||
Delete "$INSTDIR\_rainmeter_writetest.tmp"
|
||||
${EndIf}
|
||||
FunctionEnd
|
||||
|
||||
!macro InstallFiles DIR
|
||||
File "..\..\TestBench\${DIR}\Release\Rainmeter.exe"
|
||||
File "..\..\TestBench\${DIR}\Release\Rainmeter.dll"
|
||||
@ -514,33 +511,37 @@ FunctionEnd
|
||||
File /x *Example*.dll "..\..\TestBench\${DIR}\Release\Plugins\*.dll"
|
||||
!macroend
|
||||
|
||||
!macro RemoveShortcuts
|
||||
; $1=$SMPROGRAMS, $2=$SMSTARTUP, $3=$DESKTOP
|
||||
Delete "$1\Rainmeter\Rainmeter.lnk"
|
||||
Delete "$1\Rainmeter\Rainmeter Help.lnk"
|
||||
Delete "$1\Rainmeter\Rainmeter Help.URL"
|
||||
Delete "$1\Rainmeter\Remove Rainmeter.lnk"
|
||||
Delete "$1\Rainmeter\RainThemes.lnk"
|
||||
Delete "$1\Rainmeter\RainThemes Help.lnk"
|
||||
Delete "$1\Rainmeter\RainBrowser.lnk"
|
||||
Delete "$1\Rainmeter\RainBackup.lnk"
|
||||
Delete "$1\Rainmeter\Rainstaller.lnk"
|
||||
Delete "$1\Rainmeter\Skin Installer.lnk"
|
||||
Delete "$1\Rainmeter\Rainstaller Help.lnk"
|
||||
RMDir "$1\Rainmeter"
|
||||
Delete "$2\Rainmeter.lnk"
|
||||
Delete "$3\Rainmeter.lnk"
|
||||
!macro RemoveStartMenuShortcuts STARTMENUPATH
|
||||
Delete "${STARTMENUPATH}\Rainmeter.lnk"
|
||||
Delete "${STARTMENUPATH}\Rainmeter Help.lnk"
|
||||
Delete "${STARTMENUPATH}\Rainmeter Help.URL"
|
||||
Delete "${STARTMENUPATH}\Remove Rainmeter.lnk"
|
||||
Delete "${STARTMENUPATH}\RainThemes.lnk"
|
||||
Delete "${STARTMENUPATH}\RainThemes Help.lnk"
|
||||
Delete "${STARTMENUPATH}\RainBrowser.lnk"
|
||||
Delete "${STARTMENUPATH}\RainBackup.lnk"
|
||||
Delete "${STARTMENUPATH}\Rainstaller.lnk"
|
||||
Delete "${STARTMENUPATH}\Skin Installer.lnk"
|
||||
Delete "${STARTMENUPATH}\Rainstaller Help.lnk"
|
||||
RMDir "${STARTMENUPATH}"
|
||||
!macroend
|
||||
|
||||
Section
|
||||
SetOutPath "$PLUGINSDIR"
|
||||
SetShellVarContext current
|
||||
|
||||
${If} $instType == "S"
|
||||
ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\$instArc" "Bld"
|
||||
Var /GLOBAL InstArc
|
||||
${If} $Install64Bit == 1
|
||||
StrCpy $InstArc "x64"
|
||||
${Else}
|
||||
StrCpy $InstArc "x86"
|
||||
${EndIf}
|
||||
|
||||
${If} $InstallPortable != 1
|
||||
ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\$InstArc" "Bld"
|
||||
${VersionCompare} "$0" "40219" $1
|
||||
|
||||
ReadRegDWORD $2 HKLM "SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\$instArc" "Installed"
|
||||
ReadRegDWORD $2 HKLM "SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\$InstArc" "Installed"
|
||||
|
||||
; Download and install VC++ redist if required
|
||||
${If} $1 == "2"
|
||||
@ -550,7 +551,7 @@ Section
|
||||
Quit
|
||||
${EndIf}
|
||||
|
||||
${If} $instArc == "x86"
|
||||
${If} $Install64Bit != 1
|
||||
NSISdl::download /TIMEOUT=30000 "http://download.microsoft.com/download/C/6/D/C6D0FD4E-9E53-4897-9B91-836EBA2AACD3/vcredist_x86.exe" "$PLUGINSDIR\vcredist.exe"
|
||||
Pop $0
|
||||
${Else}
|
||||
@ -563,7 +564,7 @@ Section
|
||||
; download from MS failed, try from rainmter.net
|
||||
Delete "$PLUGINSDIR\vcredist.exe"
|
||||
|
||||
${If} $instArc == "x86"
|
||||
${If} $Install64Bit != 1
|
||||
NSISdl::download /TIMEOUT=30000 "http://rainmeter.net/redist/vc10SP1redist_x86.exe" "$PLUGINSDIR\vcredist.exe"
|
||||
Pop $0
|
||||
${Else}
|
||||
@ -593,7 +594,7 @@ Section
|
||||
; Download and install .NET if required
|
||||
ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v2.0.50727" "Install"
|
||||
${If} $0 != "1"
|
||||
${If} $instArc == "x86"
|
||||
${If} $Install64Bit != 1
|
||||
NSISdl::download /TIMEOUT=30000 "http://download.microsoft.com/download/5/6/7/567758a3-759e-473e-bf8f-52154438565a/dotnetfx.exe" "$PLUGINSDIR\dotnetfx.exe"
|
||||
${Else}
|
||||
NSISdl::download /TIMEOUT=30000 "http://download.microsoft.com/download/a/3/f/a3f1bf98-18f3-4036-9b68-8e6de530ce0a/NetFx64.exe" "$PLUGINSDIR\dotnetfx.exe"
|
||||
@ -605,7 +606,7 @@ Section
|
||||
${AndIf} $0 != "success"
|
||||
Delete "$PLUGINSDIR\dotnetfx.exe"
|
||||
|
||||
${If} $instArc == "x86"
|
||||
${If} $Install64Bit != 1
|
||||
NSISdl::download /TIMEOUT=30000 "http://rainmeter.net/redist/dotnetfx.exe" "$PLUGINSDIR\dotnetfx.exe"
|
||||
${Else}
|
||||
NSISdl::download /TIMEOUT=30000 "http://rainmeter.net/redist/NetFx64.exe" "$PLUGINSDIR\dotnetfx.exe"
|
||||
@ -661,7 +662,7 @@ Section
|
||||
; if the installation folder is in Program Files
|
||||
${IfNot} ${Silent}
|
||||
${AndIf} ${FileExists} "$INSTDIR\Rainmeter.ini"
|
||||
${If} $instType == "S"
|
||||
${If} $InstallPortable != 1
|
||||
!ifdef X64
|
||||
StrCmp $INSTDIR "$PROGRAMFILES64\Rainmeter" 0 RainmeterIniDoesntExistLabel
|
||||
!else
|
||||
@ -703,22 +704,18 @@ RainmeterIniDoesntExistLabel:
|
||||
SetOutPath "$INSTDIR\Skins"
|
||||
RMDir /r "$INSTDIR\Skins\illustro"
|
||||
Delete "$INSTDIR\Skins\*.txt"
|
||||
File /r /x .svn "..\Skins\*.*"
|
||||
File /r /x "..\Skins\*.*"
|
||||
|
||||
SetOutPath "$INSTDIR\Themes"
|
||||
File /r /x .svn "..\Themes\*.*"
|
||||
File /r /x "..\Themes\*.*"
|
||||
|
||||
SetOutPath "$INSTDIR"
|
||||
|
||||
${If} $instType == "S"
|
||||
${If} $InstallPortable != 1
|
||||
ReadRegStr $0 HKLM "SOFTWARE\Rainmeter" ""
|
||||
WriteRegStr HKLM "SOFTWARE\Rainmeter" "" "$INSTDIR"
|
||||
WriteRegStr HKLM "SOFTWARE\Rainmeter" "Language" "$LANGUAGE"
|
||||
${If} $defLang == "1"
|
||||
DeleteRegValue HKLM "SOFTWARE\Rainmeter" "NonDefault"
|
||||
${Else}
|
||||
WriteRegDWORD HKLM "SOFTWARE\Rainmeter" "NonDefault" 1
|
||||
${EndIf}
|
||||
WriteRegDWORD HKLM "SOFTWARE\Rainmeter" "NonDefault" $NonDefaultLanguage
|
||||
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Rainmeter" "DisplayName" "Rainmeter"
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Rainmeter" "DisplayIcon" "$INSTDIR\Rainmeter.exe,0"
|
||||
@ -741,42 +738,23 @@ RainmeterIniDoesntExistLabel:
|
||||
|
||||
; Refresh shell icons if new install
|
||||
${If} $0 == ""
|
||||
System::Call 'Shell32::SHChangeNotify(i 0x8000000, i 0, i 0, i 0)'
|
||||
${RefreshShellIcons}
|
||||
${EndIf}
|
||||
|
||||
; Remove all shortcuts
|
||||
${If} $ctlAllUsers == "1"
|
||||
SetShellVarContext current
|
||||
Call GetEnvPaths
|
||||
!insertmacro RemoveShortcuts
|
||||
!insertmacro UAC_AsUser_Call Function GetEnvPaths ${UAC_SYNCREGISTERS}
|
||||
!insertmacro RemoveShortcuts
|
||||
SetShellVarContext all
|
||||
Call GetEnvPaths
|
||||
!insertmacro RemoveShortcuts
|
||||
${Else}
|
||||
SetShellVarContext all
|
||||
Call GetEnvPaths
|
||||
!insertmacro RemoveShortcuts
|
||||
SetShellVarContext current
|
||||
Call GetEnvPaths
|
||||
!insertmacro RemoveShortcuts
|
||||
!insertmacro UAC_AsUser_Call Function GetEnvPaths ${UAC_SYNCREGISTERS}
|
||||
!insertmacro RemoveShortcuts
|
||||
; Remove all start menu shortcuts
|
||||
SetShellVarContext all
|
||||
Call RemoveStartMenuShortcuts
|
||||
|
||||
CreateShortcut "$SMPROGRAMS\Rainmeter.lnk" "$INSTDIR\Rainmeter.exe" "" "$INSTDIR\Rainmeter.exe" 0
|
||||
|
||||
SetShellVarContext current
|
||||
Call RemoveStartMenuShortcuts
|
||||
|
||||
${If} $AutoStartup == 1
|
||||
!insertmacro UAC_AsUser_Call Function CreateStartupShortcut ${UAC_SYNCREGISTERS}
|
||||
${EndIf}
|
||||
|
||||
; Create shortcuts ($1=$SMPROGRAMS, $2=$SMSTARTUP, $3=$DESKTOP)
|
||||
CreateDirectory "$1\Rainmeter"
|
||||
CreateShortCut "$1\Rainmeter\Rainmeter.lnk" "$INSTDIR\Rainmeter.exe" "" "$INSTDIR\Rainmeter.exe" 0
|
||||
|
||||
SetOutPath "$INSTDIR"
|
||||
${If} $ctlStartup == "1"
|
||||
CreateShortCut "$2\Rainmeter.lnk" "$INSTDIR\Rainmeter.exe" "" "$INSTDIR\Rainmeter.exe" 0
|
||||
${EndIf}
|
||||
|
||||
${If} $ctlDesktop == "1"
|
||||
CreateShortCut "$3\Rainmeter.lnk" "$INSTDIR\Rainmeter.exe" "" "$INSTDIR\Rainmeter.exe" 0
|
||||
${EndIf}
|
||||
!insertmacro UAC_AsUser_Call Function RemoveStartMenuShortcuts ${UAC_SYNCREGISTERS}
|
||||
|
||||
WriteUninstaller "$INSTDIR\uninst.exe"
|
||||
${Else}
|
||||
@ -788,10 +766,12 @@ RainmeterIniDoesntExistLabel:
|
||||
${EndIf}
|
||||
SectionEnd
|
||||
|
||||
Function GetEnvPaths
|
||||
StrCpy $1 $SMPROGRAMS
|
||||
StrCpy $2 $SMSTARTUP
|
||||
StrCpy $3 $DESKTOP
|
||||
Function RemoveStartMenuShortcuts
|
||||
!insertmacro RemoveStartMenuShortcuts "$SMPROGRAMS\Rainmeter"
|
||||
FunctionEnd
|
||||
|
||||
Function CreateStartupShortcut
|
||||
CreateShortcut "$SMSTARTUP\Rainmeter.lnk" "$INSTDIR\Rainmeter.exe" "" "$INSTDIR\Rainmeter.exe" 0
|
||||
FunctionEnd
|
||||
|
||||
Function FinishRun
|
||||
@ -839,7 +819,7 @@ Function un.PageOptions
|
||||
${NSD_Check} $0
|
||||
|
||||
${NSD_CreateCheckbox} 0 15u 70% 12u "$(UNSTALLSETTINGS)"
|
||||
Pop $ctlDelete
|
||||
Pop $R0
|
||||
|
||||
${NSD_CreateLabel} 16 26u 95% 12u "$(UNSTALLSETTINGSDESC)"
|
||||
|
||||
@ -847,7 +827,7 @@ Function un.PageOptions
|
||||
FunctionEnd
|
||||
|
||||
Function un.GetOptions
|
||||
${NSD_GetState} $ctlDelete $ctlDelete
|
||||
${NSD_GetState} $R0 $un.DeleteAll
|
||||
FunctionEnd
|
||||
|
||||
Section Uninstall
|
||||
@ -894,7 +874,7 @@ Section Uninstall
|
||||
RMDir /r "$INSTDIR\Themes"
|
||||
Delete "$INSTDIR\*.*"
|
||||
|
||||
${If} $ctlDelete == "1"
|
||||
${If} $un.DeleteAll == 1
|
||||
RMDir /r "$INSTDIR\Skins"
|
||||
RMDir /r "$INSTDIR\Addons"
|
||||
RMDir /r "$INSTDIR\Plugins"
|
||||
@ -907,36 +887,34 @@ Section Uninstall
|
||||
RMDir /r "$APPDATA\Rainstaller"
|
||||
|
||||
SetShellVarContext current
|
||||
Call un.GetEnvPaths
|
||||
!insertmacro RemoveShortcuts
|
||||
${If} $ctlDelete == "1"
|
||||
Call un.RemoveShortcuts
|
||||
${If} $un.DeleteAll == 1
|
||||
RMDir /r "$APPDATA\Rainmeter"
|
||||
RMDir /r "$DOCUMENTS\Rainmeter\Skins"
|
||||
RMDir "$DOCUMENTS\Rainmeter"
|
||||
RMDir /r "$1\Rainmeter"
|
||||
${EndIf}
|
||||
|
||||
!insertmacro UAC_AsUser_Call Function un.GetEnvPaths ${UAC_SYNCREGISTERS}
|
||||
!insertmacro RemoveShortcuts
|
||||
${If} $ctlDelete == "1"
|
||||
!insertmacro UAC_AsUser_Call Function un.RemoveShortcuts ${UAC_SYNCREGISTERS}
|
||||
${If} $un.DeleteAll == 1
|
||||
RMDir /r "$APPDATA\Rainmeter"
|
||||
RMDir /r "$DOCUMENTS\Rainmeter\Skins"
|
||||
RMDir "$DOCUMENTS\Rainmeter"
|
||||
${EndIf}
|
||||
|
||||
SetShellVarContext all
|
||||
Call un.GetEnvPaths
|
||||
!insertmacro RemoveShortcuts
|
||||
Call un.RemoveShortcuts
|
||||
Delete "$SMPROGRAMS\Rainmeter.lnk"
|
||||
|
||||
DeleteRegKey HKLM "SOFTWARE\Rainmeter"
|
||||
DeleteRegKey HKCR ".rmskin"
|
||||
DeleteRegKey HKCR "Rainmeter skin"
|
||||
DeleteRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Rainmeter"
|
||||
System::Call 'Shell32::SHChangeNotify(i 0x8000000, i 0, i 0, i 0)'
|
||||
${RefreshShellIcons}
|
||||
SectionEnd
|
||||
|
||||
Function un.GetEnvPaths
|
||||
StrCpy $1 $SMPROGRAMS
|
||||
StrCpy $2 $SMSTARTUP
|
||||
StrCpy $3 $DESKTOP
|
||||
Function un.RemoveShortcuts
|
||||
!insertmacro RemoveStartMenuShortcuts "$SMPROGRAMS\Rainmeter"
|
||||
Delete "$SMSTARTUP\Rainmeter.lnk"
|
||||
Delete "$DESKTOP\Rainmeter.lnk"
|
||||
FunctionEnd
|
||||
|
Reference in New Issue
Block a user