NSIS – oblige l’utilisateur à sélectionner un répertoire différent

Jusqu’à présent, j’ai compris comment détecter une installation précédente de mon logiciel en lisant les clés de registre et en vérifiant si le répertoire existe. (Les deux sont bien documentés dans le fichier d’aide NSIS). Maintenant, je veux forcer l’utilisateur à spécifier un répertoire différent, si l’application est déjà installée. (Ne voulez pas forcer la désinstallation par moi-même, car les versions précédentes suppriment tout, y compris les données enregistrées).

Autant que je sache, il existe des modèles prédéfinis dans MUI2.nsh pour la licence, le dossier d’installation, l’indicateur de progression, etc. Comment append une validation à ce stade du stream d’installation?

Mise à jour – Essayé la solution de Paul, mais cela ne fonctionne pas. En haut du script, j’ai déclaré

!define MUI_PAGE_CUSTOMFUNCTION_LEAVE validateDirectory !insertmacro MUI_PAGE_DIRECTORY 

se référer à cette fonction:

 Function validateDirectory ReadRegStr $R0 HKLM "SOFTWARE\Aadhaar Enrolment Client" "Installdir" Pop $R0 StrCmp $R0 $OUTDIR +1 +3 MessageBox MB_ICONSTOP|MB_OK 'The directory $OUTDIR already exists.Please choose a different directory.' Abort FunctionEnd 

Cette fonction affiche le message mais ne l’abandonne pas. De plus, si je clique sur “retour” dans la page de sélection du répertoire et que je clique à nouveau sur, vous continuez avec l’installation.

Vous devez spécifier une fonction “Quitter” pour la page de répertoire comme ceci

 !define MUI_PAGE_CUSTOMFUNCTION_LEAVE LeaveDirectory !insertmacro MUI_PAGE_DIRECTORY 

et cela appellera la fonction spécifiée lorsque le bouton Suivant est cliqué.

Ensuite, créez la fonction LeaveDirectory avec la logique requirejse pour valider le répertoire sélectionné et si le répertoire est jugé invalide, appelez simplement Abort dans la fonction et le programme d’installation ne passera pas à l’étape suivante.

La documentation se trouve sur cette page sous la section “Fonctions personnalisées”, mais comme vous devez développer la rubrique “Fonctions personnalisées de la page”, cela n’est malheureusement pas évident.