4

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

XAMPP错误解决方案?我在我的 Windows XP 双启动机器上安装了它

但目前在安装程序中自动安装路径设置如下。

C:\Program Files (x86)\myapplication

安装程序脚本只有以下宏来添加目录选择器页面。

!insertmacro MUI_PAGE_DIRECTORY

作为一个解决方案,我要做的是采取以下行动。

  1. 将默认目录更改为 c:\Program Files
  2. 如果用户选择 x86 文件夹,则会给出错误消息以选择另一个目录。

为此,我需要通过

$INSTDIR

  1. 检查该路径是否存在 x86 的子字符串
  2. 如果是这样,请给出错误消息。
  3. 将默认路径更改为 c:\Program Files

由于我对 nsis 不太熟悉,因此无法编写此程序。

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

4

2 回答 2

8

NSIS 提供 $PROGRAMFILES32 和 $PROGRAMFILES64:

InstallDir "$PROGRAMFILES64\myapp"
于 2012-05-04T15:57:20.623 回答
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)您可以使用.onVerifyInstDirAnders 为另一个问题提供的回调方法,它将检查用户选择的所选目录,然后再更改页面:

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

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

于 2012-05-04T12:32:41.547 回答