Archive: Function .onVerifyInstDir


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
;--------------------------------


CopyFiles
  Is there anyway for CopyFiles to let the user choose for a specific directory.
Peter.


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

@ Animaether

thanks, it works now.

Peter, BE.


@ 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.


@ Animaether.
I think i have a sollution:

;--------------------------------
Function .onVerifyInstDir
IfFileExists "$INSTDIR" Ask_Question
Goto UNINSTALL


Is this correct?

Peter,BE


maybe.
but rather use this check:
IfFileExists "$INSTDIR\*.*" Ask_Question
than that one:
IfFileExists "$INSTDIR" Ask_Question


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:


SetOverwrite doesn't affect CopyFiles, only File.