A user can select either installation locally or on a network.
When the user selects local, the install dir should be by default eg C:\Install.
When the user selects network, the install dir should be by defalt eg F:\Install.
When I call the Directory page however, I can't get to set the right default installation directory.
The directory page uses InstallDir and I can't change the value of that InstallDir from inside a section/function.
How to set the installation directory depending on a choice user made earlier ?
5 posts
The directory page uses InstallDir and I can't change the value of that InstallDir from inside a section/function.You can't do that. InstallDir means the suggested default directory that installer adds on directory page.
It'd change once users hit the browse button and specify another directory.
I think I got it.
There was already a topic with title : "overwrite default InstallDir"
I will use the same technique.
Sorry for asking the same question twice.
There was already a topic with title : "overwrite default InstallDir"
I will use the same technique.
Sorry for asking the same question twice.
If you want to show a suggested dir on directory page different than the one specified with InstallDir then you should do something like this:
Name "My Application"
OutFile test.exe
LicenseData '${NSISDIR}\License.txt'
LicenseBkColor 0xFFFFFF
InstallDir '$PROGRAMFILES\$(^name)'
!include winmessages.nsh
Page License
Page Components
Page Directory '' dir_show
Page InstFiles
Section "boo"
######
SectionEnd
Function dir_show
FindWindow $R1 "#32770" "" $HWNDPARENT
GetDlgItem $R2 $R1 '1019'
ExpandEnvStrings $R0 '%USERPROFILE%'
SendMessage $R2 ${WM_SETTEXT} 1 'STR:$R0\$(^name)'
GetDlgItem $R2 $HWNDPARENT 1
System::Call "user32::SetFocus(i R2)i"
FunctionEnd
When the user selects local, the install dir should be by default eg C:\Install.You're able to achieve this only in Function .onInit.
When the user selects network, the install dir should be by defalt eg F:\Install.
However you must use messageboxes to interact with users since there is no GUI yet.
EXAMPLE:
Name "My Application"
OutFile test.exe
LicenseData '${NSISDIR}\License.txt'
LicenseBkColor 0xFFFFFF
InstallDir '$PROGRAMFILES\$(^name)'
Page License
Page Components
Page Directory
Page InstFiles
Section "boo"
;;;;;;;;;
SectionEnd
Function .onInit
StrCpy $0 0
EnumRegKey $1 HKCU Network $0
StrCmp $1 "" end ;there is no network drive mapped
;found mapped drive(s) ask user if install either on local or network
MessageBox MB_ICONQUESTION|MB_YESNO \
"Install on local or Network drive?$\n$\n\
Either select Yes for local or No for network" IDYES end ;user selection is local installation
EnumRegKey $1 HKCU Network $0
StrCpy '$R0' '$1:'
IntOp $0 $0 + 1
EnumRegKey $1 HKCU Network $0
StrCmp $1 "" done ;there is only one mapped net drive we shall use this
StrCpy $0 0
loop: ;find all available network drives and promt user to select one
EnumRegKey $1 HKCU Network $0
StrCpy '$R0' '$1:'
IntOp $0 $0 + 1
EnumRegKey $1 HKCU Network $0
StrCmp $1 "" last
MessageBox MB_YESNO|MB_ICONQUESTION \
"Install on $R0 network drive?$\n$\n\
Select Yes to install on $R0, No to select another drive" IDYES done
goto loop
last:
MessageBox MB_YESNO|MB_ICONQUESTION \
"Last network drive found $R0 install here?$\n$\n\
Select Yes to install on $R0, No to start over" IDYES done
StrCpy $0 0
goto loop
done:
StrCpy '$INSTDIR' '$R0\$(^name)'
end:
FunctionEnd