Change the default install folder in NSIS

installation, nsis, windows-7-x64

Solution

On a win7/64, the 64 bits program files can be get from a 32 bit application via the `%ProgramW6432%` environment variable.

You could try to get it with `ReadEnvStr` :

- on a 32bit system it will return an empty string

- on a 64 bit system it will return `c:\program files` (if not configured elsewhere)

Here is a snippet that test it :

ReadEnvStr $0 ProgramW6432
StrCmp $0 "" 0 +3
MessageBox MB_OK "it is a 32b system"
goto +2
MessageBox MB_OK "it is a 64b system"

In your case, it could do :

ReadEnvStr $0 ProgramW6432
StrCmp $0 "" +2 0
StrCpy $INSTDIR $0

Edit: For the point to refuse `Program Files (x86)` you could use the `.onVerifyInstDir` callback method that was given by Anders for another question, it will check the choosen directory as it is selected by the user and before changing the page :

Function .onVerifyInstDir
  ReadEnvStr $0 "ProgramFiles(x86)"
  StrCmp $0 $INSTDIR 0 PathGood
  MessageBox MB_OK "directory not valid for installation"
  Abort
PathGood:
FunctionEnd

Here, I use another environment variable to get the (x86) variant of program files.

Problem

I'm writing a installer for windows using nsis. This installer contains a web application which is run on top of xampp, so xampp is also installed as a service with this application. But xamp gives an issue when it installed in 64bit machine on Windows 7. This is due to the directory path issue in C:\Program Files (x86) as mentioned here. XAMPP Error Solution? I have that installed on my Windows XP Dual Boot Machine But currently the automatic installation path is set as follows in the installer. ``` C:\Program Files (x86)\myapplication ``` The installer script just have the following macro to add the directory chooser page. ``` !insertmacro MUI_PAGE_DIRECTORY ``` As a solution what I'm going to do are following actions. - Change the default directory to c:\Program Files - If the user choose the x86 folder give an error message to choose another directory. For that I need to get the install directory path by ``` $INSTDIR ``` and - check whether there is a sub string of x86 with that path - if so give the error messages. - Change the default path to c:\Program Files Since I'm not much familiar with nsis I'm unable to write this program. Can someone help me on this issue?

Original source