Archiv der Kategorie: Installer

NSIS Plugin „CLR“ verwenden

NSIS & .NET

NSIS & .NET

Mit C# und dem .NET Framework von Microsoft kann man oftmals einfacher eine Funktionalität implementieren als mit C++, besonders da man sich dank dem Garbage Collector nicht (oder weniger) um das Speicherhandling kümmern muss.

Wenn man dies auch in einem NSIS-Installer nutzen möchte (evtl. hat man den Code bereits vorhanden und möchte ihn nicht noch einmal implementieren) kann man das NSIS-Plugin CLR verwenden.

Dabei sind aber ein paar Punkte zu beachten, damit der Installer auch wirklich funktioniert.

  1. Das .NET Framework muss installiert sein.
    Ohne das .NET Framework kann auch die gewünschte Funktion nicht ausgeführt werden. Je nach Systemvoraussetzungen kann aber davon ausgegangen werden, dass dies schon erfüllt ist. Eine Beschreibung, wie das .NET Framework mit NSIS installiert wird kann im Artikel „Simple Way To Install .NET Framework“ nachgelesen werden.
  2. Das .NET Assembly muss mit .NET 2.0 lauffähig sein.
    Das Plugin CLR wurde mit dem .NET Framework 2.0 erstellt. Dementsprechend können keine Assemblies gestartet werden, die eine neuere .NET Version voraussetzen (z.B. durch den Einsatz von LINQ). In Visual Studio kann das Ziel-Framework in den Project-Optionen angegeben werden. Wenn auf der Kommandozeile mittels csc.exe kompiliert wird muss csc.exe aus dem .NET Framework 2.0 Ordner verwendet werden.
    Um diese Einschränkung zu umgehen kann das Plugin selber mit der passenden .NET Version übersetzt werden. Der Sourcecode ist im .ZIP File enthalten.
  3. Das .NET Assembly muss im Installer enthalten sein.
    Das Plugin fügt das .NET Assembly nicht automatisch dem Installer hinzu. Deshalb müssen das .NET Assembly und alle weiteren nötigen Assemblies mit dem File-Kommando dem Installer hinzugefügt werden.

Noch ein paar Tipps und weitere Quellen:

  • Ausgaben von der .NET Assembly in die NSIS-Konsole.
    Wenn die .NET Assembly eine Arbeit verrichtet, die eine längere Zeit in Anspruch nimmt oder man dem Benutzer anzeigen möchte, was die DLL ausgeführt hat, kann man Anhand des Artikels „DetailPrint From Inside .NET DLL“ die Ausgaben vornehmen.
  • Zusätzliche Hinweise zum Plugin „CLR“.
    Im Forumsthread „Calling managed .NET DLL from NSIS – this works :-)“ ist die Entstehungsgeschichte des Plugins beschrieben und es werden weitere Hinweise zur Verwendung gegeben (Seiten 2 und 3 auch beachten).

Habt ihr dieses Plugin auch schon eingesetzt und wie sind eure Erfahrungen. Fehlen hier noch Fallstricke, die erwähnt werden sollten?

Dritter Teil des NSIS Tutorials veröffentlicht

Der dritteTeil des NSIS Tutorials ist ab sofort online. Viel Spass beim Lesen. Über Fragen/Vorschläge/Wünsche freue ich mich, entweder per Mail oder über Kommentare in diesem Blog.
Aufmerksame Leser werden bemerken, dass der Hinweis auf den vierten Teil verschwunden ist. Dieser Teil ist in nächster Zeit nicht geplant, da mich zur Zeit andere Projekte und Interessen stärker beschäftigen. Mehr dazu werded ihr hier in diesem Blog oder auf meiner Webseite sehen.

Dreizeiliger Titel in NSIS Installer

Der Platz für den Titel bei einem Installer, der mit NSIS und dem ModernUI erstellt wurde, reicht normalerweise für zwei Zeilen. Wenn man aber einen langen Titel hat, kann man den Platz erweitern mit dem Befehl:
!define MUI_WELCOMEPAGE_TITLE_3LINES

Hier noch ein komplettes Beispiel, das so kompiliert und ausgeführt werden kann:

!include "MUI.nsh"
!define MUI_WELCOMEPAGE_TITLE_3LINES
Name "Hello World with a really long additional Text to use several lines..."
OutFile "helloworld.exe"
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_LANGUAGE "English"
Section "Hello World"
SectionEnd

Erster Installer mit NSIS

Schon zu oft habe ich mich mit dem Install Shield herumgeärgert. Der Ärger reichte von der schwer zu begreifenden Logik in der IDE bis zu Abstürzen, nach denen man das Installer Projekt noch einmal von vorne beginnen darf.
Nachdem ich einen Installer, den ich noch mit einer älteren Version (7.x wenn ich mich nicht irre) erstellt hatte, in mit der Version 8 aktualisieren sollte, habe ich mit Install Shield abgeschlossen. Das alte Projekt konnte ich nicht öffnen, und wenn ich ein neues erstellen wollte, stürzte Install Shield regelmässig ab.
Ich habe dann NSIS (Nullsoft Scriptable Install System) heruntergeladen und den Installer damit erzeugt. Da man für NSIS Scripts erzeugt, welche die Installation beschreiben, muss man vor Abstürzen der Installer IDE keine Angst haben. Ausserdem weiss man auch, was wirklich im Installer vorgeht.
Mithilfe des Dependency Walkers kann man auch ohne teure Tools herausfinden, welche Komponenten und Libraries benötigt werden.
Falls ich in nächster Zeit dazukomme, möchte ich ein kleines Tutorial mit NSIS und Dependency Walker auf meiner Website veröffentlichen.