2016-10-20 5 views
0

Например, есть ли способ сделать что-то в этом направлении?Имеет ли NSIS функциональность eval?

Eval "MessageBox MB_OK 'Hello, World!'" 

Это, безусловно, бесполезный пример, но я считаю, что такая функциональность была бы полезна.

+0

Можете ли вы придумать более полезный пример того, что вы на самом деле пытаетесь сделать? – Anders

ответ

2

Компилятор 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 
Смежные вопросы