Аргументы функции StrContains показывают ошибку «Недопустимая команда» для переменной - PullRequest
2 голосов
/ 17 апреля 2019

Я пытаюсь использовать команду 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' в результате, но это не компилируется.

Пожалуйста, помогите мне понять почему. Заранее спасибо.

1 Ответ

0 голосов
/ 17 апреля 2019

Андрей.

Похоже, у вас аргументы в неправильном порядке. Кроме того, вы были правы при изменении переменной на $ 0.

Использование:

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

где "$result_var" = $ 0, "Needle" = "temp" (Игла, которую вы ищете), и "Haystack" = $ INSTDIR (Хейстек, которую вы просматриваете).

Итак, вместо:

${StrContains} $ContainsText $INSTDIR "temp"

Попробуйте это:

${StrContains} $0 "temp" $INSTDIR
...