我正在尝试使用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',但是这不会编译。
请帮我理解原因。提前致谢。
安德鲁。
看起来你的参数输入顺序错误。此外,您将变量更改为$ 0是正确的。
用法是:
${StrContains} "$result_var" "Needle" "Haystack"
其中"$result_var"
= $ 0,"Needle"
=“temp”(你正在寻找的针),"Haystack"
= $ INSTDIR(你正在浏览的干草堆)。
所以,而不是:
${StrContains} $ContainsText $INSTDIR "temp"
试试这个:
${StrContains} $0 "temp" $INSTDIR