Poprzedni | Spis treści | Następny
Polecenia te podobne są do poleceń preprocesora C w funkcjonalności i zasadach działania. Pozwalają one na dołączanie plików, warunkową kompilację, kompresowanie nagłówka pliku wykonywalnego oraz wykonywania procesów podczas budowania instalatora. Uwaga: żadne z tych poleceń nie pozwalają na używanie zmiennych.
[/NONFATAL] plik
Powyższe polecenie dołączy 'plik', tak jakby był on częścią oryginalnego skryptu. Zauważ, że jeśli plik dołączany znajduje się w innym katalogu, bieżący katalog znajduje się wciąż tam gdzie skompilowany został skrypt (a nie tam, gdzie znajduje się dołączany plik). Jeśli kompilator nie może znaleźć pliku, będzie go szukał w każdym katalogu do dołączania plików (include). Więcej informacji znajdziesz tutaj: !addincludedir. Jeśli używany jest przełącznik /nonfatal i nie znaleziono żadnych plików, wygenerowane zostanie ostrzeżenie zamiast błędu.
!include WinMessages.nsh !include Biblioteka.nsh !include C:\MojaKonfiguracja.nsi !include ..\MojaKonfiguracja.nsh !include /NONFATAL plik_ktory_moze_istniec_albo_nie.nsh
katalog
Dodaje kolejny katalog typu include do listy katalogów include. Lista ta jest przeszukiwana po użyciu polecenia !include. Początkową wartością jest ${NSISDIR}\Include.
!addincludedir ..\include !include jakisplik.nsh
katalog
Nakazuje kompilatorowi NSIS skanowanie podanego katalogu w celu wyszukania wtyczek bibliotek DLL.
!addplugindir MojaWtyczka MojaWtyczka::JakasFunkcja
plik tekst
Dodaje tekst do plik.
!tempfile PLIK !appendfile "${PLIK}" "XPStyle on$\n" !appendfile "${PLIK}" "Name 'test'$\n" !include "${PLIK}" !delfile "${PLIK}" !undef PLIK
nowa_sciezka
Polecenie to zmieni kompilator na nowy katalog, nowa_sciezka. Nowa_sciezka może być względna lub bezwzględna.
!cd ..\wiecej-skryptow\nowy
plik
Polecenie to usuwa plik.
!tempfile PLIK !delfile "${PLIK}" !undef PLIK
komunikat
Polecenie to wyświetli komunikat użytkownikowi kompilującemu skrypt.
!echo "witaj swiecie"
[komunikat]
Polecenie to spowoduje wyświetlenie błędu przez kompilator i zatrzymanie wykonywania skryptu. Możesz również dodać komunikat do tego błędu.
!ifdef VERSION & NOVERSION !error "Zarówno VERSION jak i NOVERSION są już zdefiniowane" !endif
polecenie
To polecenie wykona 'polecenie' używając wywołania CreateProcess(). W przeciwieństwie do polecenia !system, nie używa procesora lini poleceń, więc polecenia przeadresowywania input/output oraz polecenia takie jak 'cd', 'dir' oraz 'type' nie mogą być użyte. !execute również ignoruje zwracaną wartość wykonanego polecenia. Obecnie, jedyną znaną przewagą polecenia !execute nad poleceniem !system jest to, że nie powoduje problemów, gdy bieżący katalog roboczy jest określony przy użyciu UNC.
Na platformach POSIX, polecenie !execute wykorzysta system(), jak tutaj: !system.
!execute '"%WINDIR%\notepad.exe" "${NSISDIR}\license.txt"'
pliktymczasowy polecenie
Opcja ta pozwala kompilatorowi na użycie zewnętrznego kompresora pliku wykonywalnego EXE (takiego jak Petite lub UPX), służących do kompresji wykonywalnego nagłówka. Określ nazwę pliku tymczasowego (na przykład "temp.dat") oraz linię polecenia (na przykład "C:\program files\upx\upx -9 temp.dat") aby skompresować nagłówek.
!packhdr "$%TEMP%\exehead.tmp" '"C:\Program Files\UPX\upx.exe" "$%TEMP%\exehead.tmp"'
polecenie [porównanie wartoscporównywana]
Polecenie to wykona 'polecenie' używając wywołania funkcji system(), i jeśli zwrócona wartość porównania (używajac 'porównanie') z 'wartoscporównania' jest fałszem, wykonanie zostanie zatrzymane. Parametr 'porównanie' może być '<' lub '>' lub '<>' lub '='.
!system '"%WINDIR%\notepad.exe" "${NSISDIR}\license.txt"' !system 'echo !define cos > newinclude.nsh' !include newinclude.nsh !ifdef cos !echo "cos jest zdefiniowane" !endif
symbol
Polecenie to tworzy plik tymczasowy. Wstawia ścieżkę dostępu do definicji, nazwanej symbol.
!tempfile PACKHDRTEMP !packhdr "${PACKHDRTEMP}" '"C:\Program Files\UPX\upx.exe" "${PACKHDRTEMP}"'
!tempfile FILE !define /date DATE "%H:%M:%S %d %b, %Y" !system 'echo Utworzono: ${DATE} > "${FILE}"' File /oname=build.txt "${FILE}" !delfile "${FILE}" !undef FILE !undef DATE
[komunikat]
Polecenie to wygeneruje ostrzeżenie dla kompilatora skryptu. Możesz dodać również komunikat do tego ostrzeżenia.
!ifdef USE_DANGEROUS_STUFF !warning "Używam niebezpiecznych danych" !endif
poziom | push | pop
Polecenie to ustawia poziom zwracanej wartości. 4=wszystko, 3=bez skryptu, 2=bez info, 1=bez ostrzeżeń, 0=brak.
Polecenie push spowoduje, że polecenie !verbose ustawi poziom zwracanej wartości na specjalny stos. Polecenie pop zaś spowoduje to, że polecenie !verbose użyje bieżącego ustawienia poziomu zwracanej wartości ze stosu i użyje tego ustawienia.
!verbose push !verbose 1 !include WinMessages.nsh !verbose pop
Możesz użyć tych standardowych predefinicji, by automatycznie dodać czas zbudowania do nagłówka z tytułem wersji produktu oraz datę do numeru wersji, itp.
Bieżąca nazwa skryptu.
Bieżący numer lini.
Data rozpoczęcia kompilacji skryptu, zgodna z lokalnymi ustawieniami daty.
Czas rozpoczęcia kompilacji skryptu, zgodny z lokalnymi ustawieniami czasu.
Data & czas ostatniej modyfikacji pliku skryptu, zgodnie z lokalnymi ustawieniami daty, czasu.
Standard predefines that contain information of the current code scope.
Defined in the global scope.
Section test
!ifdef ${__GLOBAL__}
!error "this shouldn't be here!"
!endif
SectionEnd
Function test
!ifdef ${__GLOBAL__}
!error "this shouldn't be here!"
!endif
FunctionEnd
PageEx instfiles
!ifdef ${__GLOBAL__}
!error "this shouldn't be here!"
!endif
PageExEnd
Defined as the section name, without any prefixes, in section scope.
!ifdef __SECTION__
!error "this shouldn't be here!"
!endif
Section test
!ifndef __SECTION__
!error "missing predefine!"
!endif
!if ${__SECTION__} != test
!error "wrong predefine value!"
!endif
SectionEnd
Section !test
!if ${__SECTION__} != test
!error "wrong predefine value!"
!endif
SectionEnd
Section un.test
!if ${__SECTION__} != test
!error "wrong predefine value!"
!endif
SectionEnd
Defined as the function name, without any prefixes, in function scope.
!ifdef __FUNCTION__
!error "this shouldn't be here!"
!endif
Function test
!ifndef __FUNCTION__
!error "missing predefine!"
!endif
!if ${__FUNCTION__} != test
!error "wrong predefine value!"
!endif
FunctionEnd
Function un.test
!if ${__FUNCTION__} != test
!error "wrong predefine value!"
!endif
FunctionEnd
Defined in PageEx scope.
!ifdef __PAGEEX__
!error "this shouldn't be here!"
!endif
PageEx instfiles
!ifndef __PAGEEX__
!error "missing predefine!"
!endif
PageExEnd
Defined in section, function or PageEx scopes of the uninstaller.
!ifdef __UNINSTALL__
!error "this shouldn't be here!"
!endif
Function test
!ifdef __UNINSTALL__
!error "this shouldn't be here!"
!endif
FunctionEnd
Function un.test
!ifndef __UNINSTALL__
!error "missing predefine!"
!endif
FunctionEnd
$%envVarName% zostanie zastąpiona podczas kompilacji przez zmienną środowiskową envVarName.
Kompilator posiada wbudowaną listę zdefiniowanych symboli, które mogą być definiowane przy użyciu polecenia !define lub przełącznika w lini poleceń /D . Te zdefiniowane symbole mogą być używane w kompilacji warynkowej (dzięki użyciu !ifdef) lub w celu zastępowania symboli (prosta forma makr). Aby zastąpić symbol daną wartością, użyj ${SYMBOL} (jeśli SYMBOL jest niezdefiniowany, nie będzie translacji). Translacja taka jest typu first-come-first-served:
!define symbol_pierwszy ${symbol_drugi}
Jeśli symbol_drugi jest zdefiniowany w tej lini, zostanie on zastąpiony. W przeciwnym razie zostaną zastąpione wszystkie wystąpienia ${symbol_pierwszy}.
Powiązane zdefiniowane/warunkowe polecenia kompilacji:
([/date|/utcdate] gflag [value]) | (/math gflag val1 OP val2)
Polecenie to doda gflag do globalnej listy definicji. Odniesie to podobny efekt jak użycie przełącznika /D w lini poleceń (tylko po poleceniu !define).
Jeśli /date lub /utcdate są użyte, value zostanie przekazana do strftime, a rezultat zostanie użyty jako wartość gflag. Polecenie strftime przekształca specjalne symbole w pewne części bieżącego czasu lub daty. Na przykład, %H zostanie przekształcony w bieżącą wartość godziny w formacie 24-godzinnym. kompletna lista dostępnych symboli strftime dostępna jest na MSDN. Na platformach POSIX, możesz pobrać tę listę używając polecenia man strftime.
Jeśli użyty jest /math, wynik 'val1 OP val2', gdzie OP może być +,-,*,/ lub % , będzie użyty jako wartość gflag. Zauważ, że val1 AND val2 MUSZĄ być wartościami typu całkowitego!
!define USE_SOMETHING !define VERSION 1.2 !define /date NOW "%H:%M:%S %d %b, %Y" !define /math RESULT 3 + 10 !define /math REST 15 % ${RESULT}
gflag
Usuwanie wpisu z globalnej listy definicji. Zauważ że, ${SYMBOL}, który nie jest zdefiniowany, zostanie przekształcony na "${SYMBOL}".
!define SOMETHING !undef SOMETHING
gflag [bcheck gflag [...]]]
To polecenie, w połączeniu z poleceniem !endif, instruuje kompilator czy kompilować czy też nie linie pomiędzy dwoma określonymi liniami. Jeśli gflag jest zdefiniowana globalnie (poprzez polecenie !define lub przełącznik /D), to linie z tego określonego zakresu zostaną zdefiniowane. W przeciwnym razie, zostaną one pominięte. 'bcheck' może być określone jako & (logiczne and) lub | (logiczne or) z więcej niż jednym gflags -- w kolejności, z lewej do prawej.
!define SOMETHING !ifdef SOMETHING !echo "SOMETHING jest zdefiniowane" !endif !undef SOMETHING !ifdef SOMETHING !echo "SOMETHING jest zdefiniowane" # nie zostanie wypisane !endif
gflag [bcheck gflag [...]]]
Polecenie przeciwne do !ifdef. Linie zostaną skompilowane, wtedy gdy gflag nie została zdefiniowana.
[!] value [op value2]
Polecenie to, w połączeniu z poleceniem !endif, instruuje kompilator czy kompilować czy też nie linie pomiędzy dwoma określonymi liniami. Jeśli value jest niezerowa, lub porównanie value oraz value2 będzie prawdziwe, to linie z tego określonego zakresu zostaną skompilowane. W przeciwnym razie, zostaną one pominięte. op może być zarówno == lub != (porównywanie łańcuchów znaków), <=, < > lub >= (porównywanie liczb zmiennoprzecinkowych), && lub || (porównywanie logiczne). jeśli [!] jest ustawiony, zwracana wartość będzie przełączona z prawdy na fałsz i na odwrót.
!if 1 < 2 !echo "1 jest mniejsze od 2!!" !else if ! 3.1 > 1.99 !error "ta linia nie powinna się pojawić" !else !error "jak i ta" !endif
gflag [bcheck gflag [...]]]
Polecenie to, w połączeniu z poleceniem !endif, instruuje kompilator czy kompilować czy też nie linie pomiędzy dwoma określonymi liniami. Jeśli makro gflag istnieje, to linie z tego określonego zakresu zostaną skompilowane. W przeciwnym razie, zostaną one pominięte 'bcheck' może być określony jako & (logiczne and) lub | (logiczne or) z więcej niż jednym gflags -- w kolejności, z lewa do prawej.
!macro JakiesMakro !macroend !ifmacrodef JakiesMakro !echo "JakiesMakro jest zdefiniowane" !endif
gflag [bcheck gflag [...]]]
Polecenie przeciwne do polecenia !ifmacrodef. Linie zostaną skompilowane, wtedy gdy makro gflag nie istnieje.
[if|ifdef|ifndef|ifmacrodef|ifmacrondef [...]]
Polecenie to pozwala na łatwe wstawianie innego kodu, gdy ustawione są inne definicje lub makra. Możesz tworzyć bloki takie jak !ifdef/!else/!endif, !ifdef/!else ifdef/!else/!endif itp.
!ifdef VERSION OutFile installer-${VERSION}.exe !else OutFile installer.exe !endif
Polecenie zamyka blok rozpoczęty poleceniami !if, !ifdef, !ifndef, !ifmacrodef lub !ifmacrondef.
nazwa_makra [parametr] [...]
Wstawia zawartość makra, które zostało utworzone polecenim !macro. Jeśli makro zostało utworzone z parametrami, musisz wypisać tyle parametrów makra ile jest wymagane.
!macro WydrukujTekst DetailPrint "${text}" !macroend !insertmacro Print "jakiś tekst" !insertmacro Print "więcej tekstu"
nazwa_makra [parametr][...]
Tworzy makro o nazwie 'nazwa_makra'. Wszystkie linie pomiędzy !macro oraz !macroend zostaną zapisane. Aby wstawić makro później, użyj polecenia !insertmacro. Definicje !macro mogą mieć jeden lub więcej zdefiniowanych parametrów. Dostęp do parametrów jest taki sam jak dla !define (np. ${PARMNAME}) z wnętrza makra.
!macro Jakiesmakro parm1 parm2 parm3 DetailPrint "${parm1}" MessageBox MB_OK "${parm2}" File "${parm3}" !macroend
Kończy makro, które zostało rozpoczęte poleceniem !macro.