Search code examples
nsis

NSIS - Define InstallDir depending on FileExists


What I want to do with this script is to copy a file in a folder who already exists. But it can be at the root (C:) or in the program files.

There what I want, but this script doesn’t work:

  ${If} ${FileExists} "C:\Cisco Systems\VPN Client\Profiles"
    InstallDir "C:\Cisco Systems\VPN Client\Profiles"
  ${ElseIf} ${FileExists} "$PROGRAMFileS\Cisco Systems\VPN Client\Profiles"
    InstallDir "$PROGRAMFileS\Cisco Systems\VPN Client\Profiles"
  ${EndIf}

Someone can help me?

Thank you


Solution

  • Set $instdir in .onInit with StrCpy:

    !include LogicLib.nsh
    
    InstallDir "C:\Something\something" ; Used if neither of the files exist.
    
    Function .onInit
    ${If} ${FileExists} "C:\Cisco Systems\VPN Client\Profiles"
      StrCpy $InstDir "C:\Cisco Systems\VPN Client\Profiles"
    ${ElseIf} ${FileExists} "$ProgramFiles\Cisco Systems\VPN Client\Profiles"
      StrCpy $InstDir "$ProgramFiles\Cisco Systems\VPN Client\Profiles"
    ${EndIf}
    FunctionEnd