Complex validating of InstallOptions user input: Difference between revisions
From NSIS Wiki
Jump to navigationJump to search
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
{{PageAuthor|KiCHiK}} | |||
'''NOTE: If you are using 2.0b4 and above, you should use the new leave function for custom pages. This way you can validate the input without destroying the InstallOptions dialog first. See test.nsi in the Contrib\InstallOptions folder for an example.''' | |||
== Description == | |||
This script nput from InstallOptions. It asks the user for a user name and a password and gives the user 3 chances to get it right. There are 3 possible user name and password matches, user1 ~ user1 password, user2 ~ user2 password, and user3 ~ user3 password. | |||
This script requires up.ini. The contents of this file you can find below the script. | |||
== The Script == | |||
<highlight-nsis>;InstallOptions Test Script | |||
!define TEMP1 $R0 ;Temp variable | |||
;The name of the installer | |||
Name "InstallOptions Test" | |||
;The file to write | |||
OutFile "up.exe" | |||
;The default installation directory | |||
InstallDir "$PROGRAMFILES\UP" | |||
;Settings | |||
ShowInstDetails show | |||
;Texts on the dialogs | |||
DirText "Choose a directory" | |||
LicenseText "A license" | |||
LicenseData "..\..\License.txt" | |||
ComponentText "Choose components" | |||
;Order of pages | |||
Page license | |||
Page custom SetCustom ": User name and password" | |||
Page components | |||
Page directory | |||
Page instfiles | |||
Section "Read INI file" | |||
;Get Install Options dialog user input | |||
ReadINIStr ${TEMP1} "$PLUGINSDIR\up.ini" "Field 1" "State" | |||
DetailPrint "User name: ${TEMP1}" | |||
ReadINIStr ${TEMP1} "$PLUGINSDIR\up.ini" "Field 2" "State" | |||
DetailPrint "Password: ${TEMP1}" | |||
SectionEnd | |||
Function .onInit | |||
StrCpy $2 0 | |||
InitPluginsDir | |||
File /oname=$PLUGINSDIR\up.ini "up.ini" | |||
FunctionEnd | |||
Function SetCustom | |||
;Display the InstallOptions dialog | |||
Push ${TEMP1} | |||
again: InstallOptions::dialog "$PLUGINSDIR\up.ini" | |||
Pop ${TEMP1} | |||
StrCmp ${TEMP1} "success" 0 continue | |||
ReadINIStr $0 "$PLUGINSDIR\up.ini" "Field 1" "State" | |||
ReadINIStr $1 "$PLUGINSDIR\up.ini" "Field 2" "State" | |||
StrCmp $0 "user1" 0 +2 | |||
StrCmp $1 "user1 password" continue wrong | |||
StrCmp $0 "user2" 0 +2 | |||
StrCmp $1 "user2 password" continue wrong | |||
StrCmp $0 "user3" 0 +2 | |||
StrCmp $1 "user3 password" continue wrong | |||
wrong: | |||
IntOp $2 $2 + 1 | |||
StrCmp $2 3 kill | |||
MessageBox MB_OK|MB_ICONSTOP "Wrong user name and password, try again" | |||
Goto again | |||
continue: Pop ${TEMP1} | |||
Return | |||
kill: MessageBox MB_OK|MB_ICONSTOP "3 times wrong, bye!" | |||
Quit | |||
FunctionEnd</highlight-nsis> | |||
== up.ini == | |||
<highlight-ini> | |||
[Settings] | |||
NumFields=4 | |||
[Field 1] | |||
Type=text | |||
Text=asd | |||
Left=50 | |||
Right=-1 | |||
Top=17 | |||
Bottom=29 | |||
[Field 2] | |||
Type=password | |||
Text=asd | |||
Left=50 | |||
Right=-1 | |||
Top=33 | |||
Bottom=45 | |||
[Field 3] | |||
Type=label | |||
Text=Username: | |||
Left=0 | |||
Right=48 | |||
Top=17 | |||
Bottom=29 | |||
[Field 4] | |||
Type=label | |||
Text=Password: | |||
Left=0 | |||
Right=48 | |||
Top=33 | |||
Bottom=45 | |||
</highlight-ini> | |||
[[Category:Code Examples]] |
Revision as of 12:57, 8 January 2006
Author: KiCHiK (talk, contrib) |
NOTE: If you are using 2.0b4 and above, you should use the new leave function for custom pages. This way you can validate the input without destroying the InstallOptions dialog first. See test.nsi in the Contrib\InstallOptions folder for an example.
Description
This script nput from InstallOptions. It asks the user for a user name and a password and gives the user 3 chances to get it right. There are 3 possible user name and password matches, user1 ~ user1 password, user2 ~ user2 password, and user3 ~ user3 password.
This script requires up.ini. The contents of this file you can find below the script.
The Script
;InstallOptions Test Script !define TEMP1 $R0 ;Temp variable ;The name of the installer Name "InstallOptions Test" ;The file to write OutFile "up.exe" ;The default installation directory InstallDir "$PROGRAMFILES\UP" ;Settings ShowInstDetails show ;Texts on the dialogs DirText "Choose a directory" LicenseText "A license" LicenseData "..\..\License.txt" ComponentText "Choose components" ;Order of pages Page license Page custom SetCustom ": User name and password" Page components Page directory Page instfiles Section "Read INI file" ;Get Install Options dialog user input ReadINIStr ${TEMP1} "$PLUGINSDIR\up.ini" "Field 1" "State" DetailPrint "User name: ${TEMP1}" ReadINIStr ${TEMP1} "$PLUGINSDIR\up.ini" "Field 2" "State" DetailPrint "Password: ${TEMP1}" SectionEnd Function .onInit StrCpy $2 0 InitPluginsDir File /oname=$PLUGINSDIR\up.ini "up.ini" FunctionEnd Function SetCustom ;Display the InstallOptions dialog Push ${TEMP1} again: InstallOptions::dialog "$PLUGINSDIR\up.ini" Pop ${TEMP1} StrCmp ${TEMP1} "success" 0 continue ReadINIStr $0 "$PLUGINSDIR\up.ini" "Field 1" "State" ReadINIStr $1 "$PLUGINSDIR\up.ini" "Field 2" "State" StrCmp $0 "user1" 0 +2 StrCmp $1 "user1 password" continue wrong StrCmp $0 "user2" 0 +2 StrCmp $1 "user2 password" continue wrong StrCmp $0 "user3" 0 +2 StrCmp $1 "user3 password" continue wrong wrong: IntOp $2 $2 + 1 StrCmp $2 3 kill MessageBox MB_OK|MB_ICONSTOP "Wrong user name and password, try again" Goto again continue: Pop ${TEMP1} Return kill: MessageBox MB_OK|MB_ICONSTOP "3 times wrong, bye!" Quit FunctionEnd
up.ini
[Settings] NumFields=4 [Field 1] Type=text Text=asd Left=50 Right=-1 Top=17 Bottom=29 [Field 2] Type=password Text=asd Left=50 Right=-1 Top=33 Bottom=45 [Field 3] Type=label Text=Username: Left=0 Right=48 Top=17 Bottom=29 [Field 4] Type=label Text=Password: Left=0 Right=48 Top=33 Bottom=45