【问题标题】:Change the default install folder in NSIS更改 NSIS 中的默认安装文件夹
【发布时间】:2012-05-13 22:56:39
【问题描述】:

我正在使用 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 文件夹,则会出现错误消息以选择其他目录。

为此我需要通过

获取安装目录路径
$INSTDIR

和

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

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

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

【问题讨论】:

    标签: installation nsis windows-7-x64


    【解决方案1】:

    NSIS 提供 $PROGRAMFILES32 和 $PROGRAMFILES64:

    InstallDir "$PROGRAMFILES64\myapp"
    

    【讨论】:

    • 感谢安德斯,Seki 关注了您之前的答案之一。
    • 如果使用 CPACK,此变量设置为:SET(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64")
    【解决方案2】:

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

    您可以尝试使用ReadEnvStr 获取它:

    • 在 32 位系统上,它将返回一个空字符串
    • 在 64 位系统上,它将返回 c:\program files(如果未在其他地方配置)

    这是一个测试它的sn-p:

    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) 变体。

    【讨论】:

    • 这很好,适用于默认路径方案。但是如果用户手动将目录更改为“C:\Program Files (x86)”会怎样。这并不能解决当时的问题。您能否也为该实例指定一个解决方案。
    • 对不起,我一定是读得太快了。您想在用户选择目录后进行检查以拒绝任何包含“(x86)”的文件夹吗?如果是,我想我有一个解决方案,我会更新我的答案。
    猜你喜欢
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    相关资源
    最近更新 更多