Например, есть ли способ сделать что-то в этом направлении?Имеет ли NSIS функциональность eval?
Eval "MessageBox MB_OK 'Hello, World!'"
Это, безусловно, бесполезный пример, но я считаю, что такая функциональность была бы полезна.
Например, есть ли способ сделать что-то в этом направлении?Имеет ли NSIS функциональность eval?
Eval "MessageBox MB_OK 'Hello, World!'"
Это, безусловно, бесполезный пример, но я считаю, что такая функциональность была бы полезна.
Компилятор NSIS (MakeNSIS) анализирует текстовые файлы и записывает двоичные инструкции в сгенерированную установку. Само приложение установки может выполнять только команды, известные во время компиляции.
Большинство инструкций принимают переменные в качестве их параметров, поэтому вы можете получить другое поведение. Вот довольно бессмысленный пример:
Page InstFiles
Function MaybeShowMessageBox
IntCmp $0 0 skip
MessageBox MB_OK "$1"
skip:
FunctionEnd
Section
StrCpy $0 1 ; Display it
StrCpy $1 "Hello World"
Call MaybeShowMessageBox
StrCpy $1 "Goodbye World"
Call MaybeShowMessageBox
StrCpy $0 0 ; Don't display it
Call MaybeShowMessageBox
StrCpy $0 0
StrCpy $2 "$WinDir" 1 ; Get the first character
StrCmp $2 "C" "" skipWinDirMessage
StrCpy $0 1
skipWinDirMessage:
StrCpy $1 "$WinDir is on drive C"
Call MaybeShowMessageBox
SectionEnd
Обычно вы никогда не пишете такой код. IntFmt
как можно ближе к Eval, как вы собираетесь получить, но он работает только на номера:
ShowInstDetails show
Section
StrCpy $1 42
IntFmt $0 "%d" $1
DetailPrint "$1 as a number: $0"
IntFmt $0 "%#.4x" $1
DetailPrint "$1 as a hex number with a >= 4 width: $0"
IntFmt $0 "%c" $1
DetailPrint "$1 as a character: $0"
SectionEnd
Можете ли вы придумать более полезный пример того, что вы на самом деле пытаетесь сделать? – Anders