2013-05-30 3 views
1

Mon programme d'installation du programme est exécuté avec NSIS mais l'option/D ne semble pas fonctionner (ou mieux remplacée à l'intérieur). via la ligne de commande je déclenche:Dépassement du chemin du programme d'installation silencieux de NSIS

installer.exe /S /D=C:\Users\Public\installDir 

Code NSIS est:

InstallDir "C:\Users\Public\${VERSIONSTR}" 


Function xxxx 
${If} $MultiUser.InstallMode == "AllUsers"  
StrCpy $INSTDIR "C:\Users\Public\Dir1" 
${EndIf} 
IfSilent 0 +20 
    StrCpy $INSTDIR "C:\Userdata\Dir2" 
FunctionEnd 

Le dossier d'installation utilisé est "C: \ Users \ Public \ Dir2". Même si je commente le bloc IfSilent, le dossier installtion sera "C: \ Users \ Public \ Dir1" mais jamais celui qui sera passé par la ligne de commande. Qu'est-ce qui ne va pas dans mon script?

+1

méfiez-vous de votre 'IfSilent 0 + 20': il devrait être' + 2', pas '+ 20' – Seki

+0

êtes-vous sûr que vous passez dans votre fonction xxxx et/ou que le' $ INSTDIR' est pas dépassé par la suite? – Seki

+0

Oui, je passe à l'intérieur de cette fonction puisque le chemin est défini en fonction de ce qu'il est écrit à l'intérieur. Je ne vois pas non plus quelque part où il est possible de l'ignorer, mais cela pourrait être mon disparu. Qu'est-ce que je dois rechercher? – user2435588

Répondre

2
!include LogicLib.nsh 
;InstallDir ; Do not use InstallDir at all so we can detect empty $InstDir 
!define DEFDIR_MACHINE "$programfiles\foo" 
!define DEFDIR_PERUSER "$localappdata\bar" 
Function .onInit 
${If} $InstDir == "" ; /D not used 
    ${If} $MultiUser.InstallMode == "AllUsers" 
     StrCpy $InstDir "${DEFDIR_MACHINE}" 
    ${Else} 
     StrCpy $InstDir "${DEFDIR_PERUSER}" 
    ${EndIf} 
    ${If} ${Silent} 
     StrCpy $InstDir "c:\CrazySilentOverride" 
    ${EndIf} 
${EndIf} 
FunctionEnd 
Questions connexes