2012-05-04 4 views
3

Я пишу установщик для Windows, используя nsis. Этот установщик содержит веб-приложение, которое выполняется поверх xampp, поэтому xampp также устанавливается как служба с этим приложением. Но xamp дает проблему, когда он установлен на 64-битной машине в Windows 7. Это связано с проблемой пути каталога в C: \ Program Files (x86), как упоминалось здесь.Измените папку установки по умолчанию в NSIS

XAMPP Error Solution? I have that installed on my Windows XP Dual Boot Machine

Но в настоящее время автоматический путь установки устанавливается следующим образом в программе установки.

C:\Program Files (x86)\myapplication 

Установщик сценария имеет только следующий макрос, чтобы добавить страницу выбора выбора каталога.

!insertmacro MUI_PAGE_DIRECTORY 

В качестве решения я собираюсь выполнить следующие действия.

  1. Изменить каталог по умолчанию C: \ Program Files
  2. Если пользователь может выбрать папку x86 выдаст сообщение об ошибке, чтобы выбрать другой каталог.

Для этого мне нужно получить путь установки каталога на

$INSTDIR 

и

  1. проверки, есть ли подстрока из x86 с этим путем
  2. если так дать Сообщения об ошибках.
  3. Изменить путь по умолчанию C: \ Program Files

Поскольку я не очень знаком с НСИ я не в состоянии написать эту программу.

Может кто-нибудь помочь мне по этой проблеме?

ответ

3

На win7/64 64-битные программные файлы можно получить из 32-разрядного приложения через переменную окружения %ProgramW6432%.

Вы могли бы попытаться получить его с ReadEnvStr:

  • на 32-битной системой он вернет пустую строку
  • на 64 битной системе он будет возвращать c:\program files (если не настроено в другом месте)

Вот фрагмент кода, проверить его:

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" 

В вашем случае, это может сделать:

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

Edit: Для точки отказаться Program Files (x86) вы можете использовать метод .onVerifyInstDir обратного вызова, который был дан Андерсом для another question, он проверит каталог Выбирается, как это выбранный пользователем и перед сменой страницы:

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

Здесь, я использую другое переменное окружение, чтобы получить (x86) вариант программных файлов.

+0

Это замечательно и работает со сценарием пути по умолчанию. Но что, если пользователь изменит каталог на «C: \ Program Files (x86)» вручную. Это не решит проблему в то время. Можете ли вы указать решение для этого экземпляра. – Thilanka

+0

Извините, я, должно быть, слишком быстро прочитал ваш вопрос. Вы хотите сделать проверку после того, как пользователь выбрал каталог, чтобы отказаться от любой папки, содержащей «(x86)»? Если да, я думаю, что у меня есть решение, и я обновлю свой ответ. – Seki

7

NSIS предоставляет $ PROGRAMFILES32 и $ PROGRAMFILES64:

InstallDir "$PROGRAMFILES64\myapp" 
+0

Спасибо Anders и Seki последовали одному из ваших предыдущих ответов. – Thilanka

+0

Если вы используете CPACK, эта переменная устанавливается как: \t SET (CPACK_NSIS_INSTALL_ROOT "$ PROGRAMFILES64") – Pierluigi