2011-11-28 7 views
6

trato de tener el siguiente código deTener InstallDir dentro de si el bloque ELSE

; The default installation directory 
InstallDir $PROGRAMFILES\${PRODUCT_NAME} 

a

!include x64.nsh 
${If} ${RunningX64} 
    ; The default installation directory 
    InstallDir $PROGRAMFILES\${PRODUCT_NAME} 
${Else} 
    ; The default installation directory 
    InstallDir $PROGRAMFILES64\${PRODUCT_NAME} 
${EndIf} 

me sale el siguiente error: -

!insertmacro: _If 
Error: Can't add entry, no section or function is open! 
Error in macro _RunningX64 on macroline 2 
Error in macro _If on macroline 9 
Error in script "C:\Users\yccheok\Desktop\mysoftware.nsi" on line 17 -- aborting creation process 

¿Hay manera de que puede establecer el valor para InstallDir, dentro del bloque if else?

Respuesta

9

Si necesita un $ instdir dinámica no se debe utilizar InstallDir en absoluto, sino establecer $ instdir en .onInit:

Installdir "" 
!include LogicLib.nsh 
!include x64.nsh 

Function .onInit 
${If} $InstDir == "" ; /D= was not used on the command line 
    ${If} ${RunningX64} 
     StrCpy $InstDir "c:\foo" 
    ${Else} 
     StrCpy $InstDir "c:\bar" 
    ${EndIf} 
${EndIf} 
FunctionEnd 

Su actual si el bloque demás no tiene ningún sentido, ya que está seleccionando los 32 bits archivos de programa en x64 y los archivos de programa de 64 bits en x86! Está bien usar $ PROGRAMFILES64 en x86 así que si siempre quiere los archivos de programa "reales" puede usar $ PROGRAMFILES64 para todas las plataformas ...

+1

"$ PROGRAMFILES64 para todas las plataformas" -> esta es una sugerencia bastante buena. Por cierto, es "/ D = no se usó en la línea de comando" el caso de manejo es importante, ya que mis usuarios la mayoría de las veces simplemente harán doble clic en el instalador. –

+1

@YanChengCHEOK No, no es importante pero/D anulará InstallDir, por lo que mantenerse compatible no duele;) – Anders

+1

¡Gracias! El problema conmigo era que estaba tratando de hacer esto fuera '.onInit'. – thameera

Cuestiones relacionadas