StrContains函数参数显示变量的错误“无效命令”

问题描述 投票:2回答:1

我正在尝试使用NSIS StrContains命令。

根据维基(https://nsis.sourceforge.io/StrContains),其论点如下:${StrContains} "$result_var" "Needle" "Haystack"

示例如下:

${StrContains} $0 "Dirt" "Dirty deeds done dirt cheap"

但是当我尝试使用这个函数时,编译器会向我显示一个错误:

命令无效:$ ContainsText

我试图将变量更改为堆栈$ 0,但结果是相同的。似乎问题出在争论中,但参数重新排序并没有帮助。包括变量到引号也没有任何影响。

我使用NSIS 3.01,然后更新到最新版本3.04 - 结果是一样的。

这是我的测试* .nsi文件:

;Include Modern UI
  !include "MUI2.nsh"
; Include for String commands
  !include "LogicLib.nsh"
;--------------------------------
;General

  ;Name and file
  Name "Basic Test"
  OutFile "Basic.exe"

  ;Default installation folder
  InstallDir "C:\temp"

  ;Request application privileges
  RequestExecutionLevel user

  ; import functions
  !define StrContains

;--------------------------------
;Interface Settings
  !define MUI_ABORTWARNING
;--------------------------------
;Pages
  !insertmacro MUI_PAGE_DIRECTORY
  !insertmacro MUI_PAGE_INSTFILES
;--------------------------------
;Languages
  !insertmacro MUI_LANGUAGE "English"
;--------------------------------
;Installer Sections

Var ContainsText

Section "Dummy Section" SecDummy

  SetOutPath "$INSTDIR"
  ;set 5 as initial value
  StrCpy $ContainsText "5"
  MessageBox MB_OK "Initial value: $ContainsText"

  ; check if inst dir contains 'temp'
  ; According to https://nsis.sourceforge.io/StrContains
  ; ${StrContains} "$result_var" "Needle" "Haystack"
  ${StrContains} $ContainsText $INSTDIR "temp"
  MessageBox MB_OK "Cmp result: $ContainsText"

  ;Create uninstaller
  WriteUninstaller "$INSTDIR\Uninstall.exe"

SectionEnd

;--------------------------------
;Uninstaller Section
Section "Uninstall"
  Delete "$INSTDIR\Uninstall.exe"
  RMDir "$INSTDIR"
SectionEnd

我希望第一个参数是结果变量,第二个 - 原始字符串,第三个 - 搜索子字符串。作为结果,StrContains变量应该是'test',但是这不会编译。

请帮我理解原因。提前致谢。

installer nsis
1个回答
0
投票

安德鲁。

看起来你的参数输入顺序错误。此外,您将变量更改为$ 0是正确的。

用法是:

${StrContains} "$result_var" "Needle" "Haystack"

其中"$result_var" = $ 0,"Needle" =“temp”(你正在寻找的针),"Haystack" = $ INSTDIR(你正在浏览的干草堆)。

所以,而不是:

${StrContains} $ContainsText $INSTDIR "temp"

试试这个:

${StrContains} $0 "temp" $INSTDIR
© www.soinside.com 2019 - 2024. All rights reserved.