【问题标题】:!define MUI_PAGE_DIRECTORY_VARIABLE does not create variable - NSIS!define MUI_PAGE_DIRECTORY_VARIABLE 不创建变量 - NSIS
【发布时间】:2016-04-22 11:42:01
【问题描述】:

我正在尝试创建一个 NSIS 脚本,它将各种文件复制到可以指定的两个不同位置。 我检查了文档和其他 StackOverflow 条目,但没有提出解决方案。 我的问题是我想为目录定义第二个变量。在此目录中复制示例文件和项目。

在尝试编译 NSI 时,我收到以下错误/警告:

    3 warnings:
  unknown variable/constant "APPDIR" detected, ignoring (C:\Users\max\Desktop\PortablePlayer\so.nsi:29)
  unknown variable/constant "APPDIR" detected, ignoring (C:\Users\max\Desktop\PortablePlayer\so.nsi:33)
  unknown variable/constant "APPDIR\Testfile.txt" detected, ignoring (C:\Users\max\Desktop\PortablePlayer\so.nsi:43)

这是我正在使用的脚本:

    !include "MUI.nsh"

Name "MyApp"

OutFile "MyApp-Installer.exe"
InstallDir "$PROGRAMFILES\My App"

; Installation Directory for the App 
!insertmacro MUI_PAGE_DIRECTORY

; Installation Directory for the samples and projects
!define MUI_PAGE_HEADER_SUBTEXT "Choose your custom Samples Folder"
!define MUI_DIRECTORYPAGE_TEXT_TOP "To separate your App and your samples and projects you can choose a different folder than the installation directory"
!define MUI_PAGE_DIRECTORY_VARIABLE $APPDIR
!insertmacro MUI_PAGE_DIRECTORY

!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH

!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES

!insertmacro MUI_LANGUAGE "English"

Section ""
  SetOutPath $INSTDIR
  File Testfile.txt

  SetOutPath $APPDIR
  File Testfile.txt

  FileOpen $0 "$DESKTOP\Hello_world.txt" w
  FileWrite $0 $APPDIR
  FileClose $0

  WriteUninstaller "$INSTDIR\MyApp-Uninstaller.exe"
SectionEnd

Section "Uninstall"
  Delete "$INSTDIR\Testfile.txt"
  Delete "$INSTDIR\MyApp-Uninstaller.exe"
  RMDir $INSTDIR
  Delete "$APPDIR\Testfile.txt"
SectionEnd

为了调试,我尝试将 $APPDIR 的值写入文本文件,但它只写入 $APPDIR 而不是值。 如果我将其更改为 $INSTDIR,它会打印 $INSTDIR 的正确路径。 如何初始化 $APPDIR 的变量? 如果我尝试在顶部初始化它,它在那里但为空,因此在成功编译脚本后安装程序失败。

使用 NSIS 2.5.1 运行 Win 7

有人能解释一下是什么问题吗?

谢谢!

【问题讨论】:

  • 我希望你的意思是 v2.51 而不是 v2.5.1 :)

标签: nsis


【解决方案1】:

MUI_DIRECTORYPAGE_VARIABLE 定义告诉 MUI,您有一个要使用的自定义变量,但 MUI 不会创建该变量,您必须自己在脚本顶部附近执行此操作:

Var APPDIR

所以它应该看起来像

Var APPDIR
!include "MUI.nsh"
!define MUI_DIRECTORYPAGE_VARIABLE $APPDIR
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"

Section
DetailPrint $APPDIR
SectionEnd

编辑:定义的名称是 MUI_DIRECTORYPAGE_VARIABLE 而不是 MUI_PAGE_DIRECTORY_VARIABLE 就像您在示例中一样...

【讨论】:

  • 感谢您的回复,正如我提到的,在顶部创建变量可以解决编译器错误,但会留下一个 MUI 未使用的空且未使用的变量
  • 啊,你也用错了define的名字,是MUI_DIRECTORYPAGE_VARIABLE(没有PAGE前缀)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-20
  • 2015-04-08
  • 2012-01-24
  • 2011-12-30
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
相关资源
最近更新 更多