更改NSIS中的默认安装文件夹

时间:2012-05-04 11:38:28

标签: installer nsis windows-7-x64

我正在使用nsis编写Windows安装程序。此安装程序包含一个在xampp之上运行的Web应用程序,因此xampp也作为此应用程序的服务安装。但是xamp在Windows 7上安装在64位机器上会出现问题。这是由于此处提到的C:\ Program Files(x86)中的目录路径问题。

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文件夹,则会显示错误消息以选择其他目录。
  3. 为此,我需要通过

    获取安装目录路径
    $INSTDIR
    

    1. 检查是否存在具有该路径的x86子字符串
    2. 如果是,请提供错误消息。
    3. 将默认路径更改为c:\ Program Files
    4. 由于我对nsis不太熟悉,我无法编写这个程序。

      有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:8)

NSIS提供$ PROGRAMFILES32和$ PROGRAMFILES64:

InstallDir "$PROGRAMFILES64\myapp"

答案 1 :(得分:3)

在win7 / 64上,可以通过%ProgramW6432%环境变量从32位应用程序获取64位程序文件。

您可以尝试使用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

修改:对于要拒绝Program Files (x86)的点,您可以使用Anders为another question提供的.onVerifyInstDir回调方法,它会检查选择用户在更改页面之前选择的目录:

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

在这里,我使用另一个环境变量来获取程序文件的(x86)变体。