PETER&BRENT
5th November 2005 17:08 UTC
Function .onVerifyInstDir
Hello,
first off all I am from Belgium so sorry for my lang.
My first question: how can I let the user choose for what name they wont for the "$INSTDIR"? in this example it is "$INSTDIR backup\"
CopyFiles "$INSTDIR\*.*" "$INSTDIR backup\"
My second question: when the MessageBox appears I have to choose between Yes or No, when I press the button No the instalation proces is still running, how can stop this only when I press the No button?
Can you also pleese check the total script for errors.
Thanks in advance,
Peter, Belgium.
ps: great stuff NSIS
;--------------------------------
Function .onVerifyInstDir
CreateDirectory "$INSTDIR backup"
CopyFiles "$INSTDIR\*.*" "$INSTDIR backup\"
Delete "$INSTDIR backup\Verwijderen.exe"
IfFileExists "$INSTDIR" Ask_Question
Goto INSTALL
Ask_Question:
MessageBox MB_YESNO "${PRODUCT_NAME} is al geïnstalleerd. \
Wil u het eerst verwjderen en vervolgens opnieuw installeren? \
Als u op Nee klikt moet u de installatie \
volledig annuleren en van de cd-rom een ander \
setup bestand selecteren dat nog \
niet is geïnstalleerd." \
IDYES UNINSTALL IDNO INSTALL
UNINSTALL:
ExecWait '"$INSTDIR\uninstall.exe"'
ExecWait '"$INSTDIR\Verwijderen.exe"'
INSTALL:
FunctionEnd
;--------------------------------
PETER&BRENT
6th November 2005 00:14 UTC
CopyFiles
Is there anyway for CopyFiles to let the user choose for a specific directory.
Peter.
Animaether
6th November 2005 09:17 UTC
The answer to your first question and second post is that you need to insert a Directory page. You can tell a Directory page to save the directory/folder picked in a specific variable other than $INSTDIR if you require this (e.g. having to pick two separate directories).
# modern ui
>Var ANOTHER_DIR
># directory/folder picked will be stored in $ANOTHER_DIR
>!define MUI_DIRECTORYPAGE_VARIABLE $ANOTHER_DIR
>!insertmacro MUI_PAGE_DIRECTORY
>
# classic ui
>Var ANOTHER_DIR
PageEx directory
# directory/folder picked will be stored in $ANOTHER_DIR
DirVar $ANOTHER_DIR
PageExEnd
>
-----
And your second question :
MessageBox MB_YESNO "(message here)" IDYES UNINSTALL IDNO STOPINSTALL
STOPINSTALL:
Abort # This halts the installer, but does not exit it
Quit # This exits the installer
>UNINSTALL:
# uninstall code here
# install code here
PETER&BRENT
6th November 2005 14:23 UTC
@ Animaether
thanks, it works now.
Peter, BE.
PETER&BRENT
6th November 2005 14:46 UTC
@ Animaether
Another problem.
I exit the programm.
Run the programm again, then a have a MessegeBox the programm is already installed!
Can you help me?
Function .onVerifyInstDir
IfFileExists "$INSTDIR" Ask_Question
Ask_Question:
MessageBox MB_YESNO "${PRODUCT_NAME} is al geïnstalleerd. \
Wil u het eerst verwjderen en vervolgens opnieuw installeren? \
Als u bevestigd met Ja zal het programma voor alles te verwijderen \
eerst de map ${PRODUCT_NAME} backup maken en een kopie van alle \
bestanden hierin kopiëren. \
Verander deze backup map na deze installatie van naam zodanig dat bij \
een volgende herinstallatie van ${PRODUCT_NAME} de map ${PRODUCT_NAME} backup \
niet overschreven wordt. \
Als u op Nee klikt moet u de installatie \
volledig annuleren en van de cd-rom een ander \
setup bestand selecteren dat nog \
niet is geïnstalleerd. \
Het programma maakt altijd een werkmap aan \
met de naam van het programma. \
Wil u verder gaan met het nemen van een backup en vervolgens \
het ${PRODUCT_NAME} programma verwijderen en herinstalleren?" \
IDYES UNINSTALL IDNO STOPINSTALL
STOPINSTALL:
Quit
Abort
UNINSTALL:
CreateDirectory "$INSTDIR backup"
SetOverwrite off
CopyFiles "$INSTDIR\*.*" "$INSTDIR backup\"
Delete "$INSTDIR backup\Verwijderen.exe"
Delete "$INSTDIR backup\uninstall.exe"
Delete "$INSTDIR backup\setup.log"
ExecWait '"$INSTDIR\uninstall.exe"'
ExecWait '"$INSTDIR\Verwijderen.exe"'
FunctionEnd
;--------------------------------
Peter, BE.
PETER&BRENT
6th November 2005 15:00 UTC
@ Animaether.
I think i have a sollution:
;--------------------------------
Function .onVerifyInstDir
IfFileExists "$INSTDIR" Ask_Question
Goto UNINSTALL
Is this correct?
Peter,BE
Comm@nder21
6th November 2005 16:52 UTC
maybe.
but rather use this check:
IfFileExists "$INSTDIR\*.*" Ask_Question
than that one:
IfFileExists "$INSTDIR" Ask_Question
PETER&BRENT
6th November 2005 17:03 UTC
Hello again,
after 2 or 3 installation en unstallation
the SetOverwrite function is not working for
CopyFiles "$INSTDIR\*.*" "$INSTDIR backup\"
How can I fix this?
UNINSTALL:
CreateDirectory "$INSTDIR backup"
SetOverwrite off
CopyFiles "$INSTDIR\*.*" "$INSTDIR backup\"
Delete "$INSTDIR backup\Verwijderen.exe"
Delete "$INSTDIR backup\uninstall.exe"
Delete "$INSTDIR backup\setup.log"
ExecWait '"$INSTDIR\uninstall.exe"'
ExecWait '"$INSTDIR\Verwijderen.exe"'
STOPINSTALL:
kichik
8th November 2005 17:50 UTC
SetOverwrite doesn't affect CopyFiles, only File.