# Nullsoft Scriptable Install System
Nullsoft Scriptable Install System (NSIS), Winamp'ın yapımcıları Nullsoft tarafından desteklenen Microsoft Windows için komut dosyasıyla çalışan bir kurulum sihirbazı hazırlama aracıdır. NSIS, başta zlib lisansı olmak üzere, özgür yazılım lisanslarının bir kombinasyonu altında yayımlanır. Amazon, Dropbox, Google, Ubisoft, FL Studio, BitTorrent ve McAfee gibi kullanıcılarla, InstallShield gibi ticari özel mülk ürünlere yaygın olarak kullanılan bir alternatif haline geldi.


## Tarih.
NSIS, Winamp'ı dağıtmak için hazırlandı. Önceki bir Nullsoft ürünü olan PiMP'ye (plugin Mini Packager) dayalıdır ve SuperPiMP olarak da bilinir. 2.0a0 sürümünden sonra proje, Nullsoft dışındaki geliştiricilerin düzenli olarak üzerinde çalışmaya başladığı SourceForge'a taşındı. NSIS 2.0, yaklaşık iki yıl sonra yayınlandı.
NSIS sürüm 1 birçok yönden klasik Windows Installer'a benzer, ancak daha fazla sıkıştırma biçimini destekler. NSIS sürüm 2, yeni bir aerodinamik grafik kullanıcı arabirimine sahiptir ve LZMA sıkıştırmayı, birden çok dili ve kullanımı kolay bir eklenti sistemini destekler.
Ocak 2006'da NSIS, SourceForge'un ayın projesi oldu.


## Komut dosyası örnekleri.
### Hello world!
!include "MUI.nsh"
!insertmacro MUI_LANGUAGE "English"
Name "Hello world!" # Name of the installer.
OutFile "HelloWorld.exe" # Name of the installer's file.
Function .onInit # Function that will be executed on installer's start up.
 MessageBox MB_OK|MB_ICONINFORMATION "Hello world!" # Show a message that says "Hello world!".
 Quit # Close the installer because this is a simple "Hello world!" installer.
FunctionEnd
Section # Useless section because this is a simple "Hello world!" installer.
SectionEnd


### Basit yükleyici.
!include "MUI.nsh"
!define MUI_ABORTWARNING # This will warn the user if they exit from the installer.
!insertmacro MUI_PAGE_WELCOME # Welcome to the installer page.
!insertmacro MUI_PAGE_DIRECTORY # In which folder install page.
!insertmacro MUI_PAGE_INSTFILES # Installing page.
!insertmacro MUI_PAGE_FINISH # Finished installation page.
!insertmacro MUI_LANGUAGE "English"
Name "MyApp" # Name of the installer (usually the name of the application to install).
OutFile "MyAppInstaller.exe" # Name of the installer's file.
InstallDir "$PROGRAMFILES\MyApp" # Default installing folder ($PROGRAMFILES is Program Files folder).
ShowInstDetails show # This will always show the installation details.
Section "MyApp" # In this section add your files or your folders.
 # Add your files with "File (Name of the file)", example: "File "$DESKTOP\MyApp.exe"" ($DESKTOP is Desktop folder); or add your folders always with "File (Name of the folder)\*", always add your folders with an asterisk, example: "File /r $DESKTOP\MyApp\*" (this will add its files and (with /r its subfolders)).
SectionEnd


### Başlat menüsüne bir kısayol ekleyen ve bir kaldırıcıyla birlikte gelen basit yükleyici.
  - define name of installer
OutFile "InstallMyApp"
  - define installation directory
InstallDir $LOCALAPPDATA\Programs\myapp
  - For removing Start Menu shortcut in Windows 7
RequestExecutionLevel user
  - start default section
Section
 # set the installation directory as the destination for the following actions
 SetOutPath $INSTDIR
 # create the uninstaller
 WriteUninstaller "$INSTDIR\uninstall.exe"
 # point the new shortcut at the program uninstaller
 CreateShortcut "$SMPROGRAMS\My App.lnk" "$INSTDIR\myapp.exe"
 CreateShortcut "$SMPROGRAMS\My App Uninstall.lnk" "$INSTDIR\uninstall.exe"
 File /r "C:\path\to\where\my\files\are\*"
SectionEnd
  - uninstaller section start
Section "uninstall"
 # first, delete the uninstaller
 Delete "$INSTDIR\uninstall.exe"
 # second, remove the link from the start menu
 Delete "$SMPROGRAMS\My App.lnk"
 Delete "$SMPROGRAMS\My App Uninstall.lnk"
 Delete $INSTDIR
  - uninstaller section end
SectionEnd


## Konseptler.
### Kod.
NSIS derleyici programı "makensis", aşağıdaki örnek gibi betikleri yürütülebilir yükleme programlarında derler. Komut dosyasındaki her satır tek bir komut içerir.
  - Example script
Name "Example1"
OutFile "jubaowu.exe"
InstallDir "$PROGRAMFILES\Example1"
Page Directory
Page InstFiles
Section
 SetOutPath $INSTDIR
 File ..\makensis.exe
SectionEnd


### Modern kullanıcı arayüzü.
Sürüm 2.0, "Modern UI" (MUI) adı verilen yeni bir isteğe bağlı aerodinamik grafik kullanıcı arabirimini tanıttı. MUI, sihirbaz benzeri bir arayüze sahiptir. Bir karşılama sayfası, bitiş sayfası, dil seçimi diyaloğu, bileşenler için açıklama alanı ve eski kullanıcı arabiriminden daha fazla özelleştirme seçeneklerini destekler.
  - Modern UI example script
!include MUI.nsh
Name "Example 2"
OutFile "Example2.exe"
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE "license.rtf"
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_LANGUAGE "German"
!insertmacro MUI_LANGUAGE "French"
Section "Extract makensis"
 SetOutPath $INSTDIR
 File ..\makensis.exe
SectionEndNSIS sürüm 2.30'dan (25 Ağustos 2007'de yayınlandı) beri, bu kullanıcı arayüzünün yeni sürümü (beta) erişilebilir durumdadır: Modern kullanıcı arayüzünün bir geliştirmesi olan Modern kullanıcı arayüzü 2 (MUI2). Eski MUI'den farklı olarak bu sürüm, eski moda InstallOptions .ini dosyaları yerine nsDialogs'u temel alır.
2.34 sürümünden itibaren (24 Aralık 2007'de yayınlandı) bu MUI2 toplu tüketim için hazırdır ve tüm NSIS paketlerine dahildir. Ayrıca tüm örnekler ona çevrilmişti.
Modern UI 2 dokümantasyonu.


#### Grafik arayüzleri.
NSIS projeleri, yalnızca metin dosyalarını (.nsi uzantılı) düzenleyerek yapılandırılabilir. Ancak, birkaç üçüncü taraf düzenleme yazılımı sağlar:
  - EclipseNSIS, Eclipse platformu için bir modüldür. NSIS betiklerinin düzenlenmesine, derlenmesine ve doğrulanmasına izin verir.
  - Özel C++ veya Delphi eklentilerini destekleyen HM NIS Edit (ücretsiz yazılım) editörü.
  - Venis (ücretsiz yazılım) editörü
  - Visual & Installer, NSIS'i Microsoft Visual Studio IDE ile entegre eden ve NSIS projelerinin doğrudan kendi içinde oluşturulmasına ve oluşturulmasına izin veren bir eklentidir.


#### Yükleyici arabirimleri.
Modern kullanıcı arayüzünü genişleten veya değiştiren birkaç proje son birkaç yılda başladı. ExperienceUI ve UltraModernUI gibi arabirimler, InstallShield arabirimine benzeyecek şekilde kaplamasını yaparak yükleyicinin stilini tamamen değiştirir. InstallSpiderUI gibi diğer arabirimler, ASD ile aynı işlevsellik düzeyini korurken, görsel açıdan daha minimalist bir yaklaşımı hedefler.


### Eklentiler.
NSIS, yükleyici ile iletişim kurabilen eklentilerle genişletilebilir. Eklentiler, dinamik bağlantı kitaplığı (C, C++ veya Delphi gibi) oluşturabilen herhangi bir yönetilmeyen programlama dilinde yazılabilir ve yükleme görevlerini gerçekleştirmek veya yükleyici arabirimini genişletmek için kullanılabilir. Bir eklenti, tek bir NSIS kodu satırıyla çağrılabilir.
NSIS paketiyle birlikte, yükleyicinin bir açılış ekranı görüntülemesine, özel bir sayfa görüntülemesine, arka planda bir resim görüntülemesine, bir web sitesinden dosya indirmesine, matematiksel işlemleri gerçekleştirmesine, yama dosyalarına ve daha fazlasına izin veren çeşitli eklentiler gelir.
ZipDLL ve bir Python eklentisi dahil olmak üzere diğer eklentiler çevrimiçi olarak mevcuttur.


## Özellikler.
NSIS aşağıdaki özellikleri destekler:
  - zlib, bzip2 ve LZMA sıkıştırması
  - Komut dosyası tabanlı
  - Çok dilli
  - Eklenti desteği
  - Komut dosyası ön işlemcisi


## Oluşturulan kurulum sihirbazı.
Oluşturulan kurulum sihirbazı, kurulum sihirbazı içinde arşivlenen yükleme dosyaları, NSIS yükleyicisi için 34 KB'lik bir ek yük, ve yürütülebilir kodda derlenen yükleme komut dosyası ile bir Portable Executable'dır . Kurulum komut dosyası derlenirken, ikili dosyanın tersine mühendislik işlemi yapılmadan komut dosyası teslim edilen yürütülebilir dosyadan alınamaz.
Arşiv, 7-Zip, Total Commander eklentisi InstallExplorer veya FAR Manager eklentisi InstallExplorer kullanılarak açılabilir.
Arşiv birkaç klasör içerir:
  - $PLUGINSDIR : yükleme rutini eklentileri
  - $INSTDIR : kurulum sırasında kullanılan dosyalar
  - $_OUTDIR : kurulacak dosyalar.
Oluşturulan yükleyici, kullanıcılara daha fazla kontrol sağlamak için komut satırı argümanları içerir:
  - /NCRC, komut dosyası zorlamadıkça CRC denetimini devre dışı bırakır
  - /S, yükleyici/kaldırıcıyı sessizce çalıştırır.
  - /D varsayılan kurulum dizinini ayarlar. Son parametre olmalı ve tırnak içermemelidir. Yalnızca mutlak yollar desteklenir.


## Unicode desteği.
NSIS'in 3.0'dan önceki sürümleri Unicode'u desteklemiyordu, ancak yalnızca bazı dosyaları bir eklenti aracılığıyla farklı kodlamalara dönüştürmek için bir araçtı. Ancak, tam Unicode desteğine sahip bir NSIS çeşidi mevcuttur. Bu varyantı kullanan önemli projeler şunlardır:
  - Google (Picasa)
  - Windows için Apache OpenOffice
  - Mozilla (Firefox, Mozilla Thunderbird)
  - FileZilla
  - Winamp
  - Flickr
  - PortableApps.com
  - Second Life
  - Xampp
  - CherryPlayer
  - AVG
  - TeamViewer
NSIS'in 3.0 sürümünün piyasaya sürülmesiyle, "Unicode true" derleyici yönergesi kullanılarak Unicode desteği uygulanabilir. Bu, daha fazla kod değişikliği olmaksızın tam Unicode desteği sağlar, ancak yükleyici Windows 95/98/Me altında çalışmaz. 2016 itibarıyla, 3.0 sürümünden önce NSIS, Unicode 2.46.5 Rev 3 ve ANSI 2.51 için PortableApps formatında mevcuttu.