简体   繁体   中英

Change the default install folder in NSIS

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.

  1. Change the default directory to c:\\Program Files
  2. 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

  1. check whether there is a sub string of x86 with that path
  2. if so give the error messages.
  3. 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?

NSIS提供$ PROGRAMFILES32和$ PROGRAMFILES64:

InstallDir "$PROGRAMFILES64\myapp"

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM