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