# Installation (Software)

Die Installation von Software ist der Vorgang, bei dem ein oder mehrere Programme oder neue Versionen von Programmen auf einen vorhandenen Computer kopiert und dabei eventuell konfiguriert werden. Dieser Vorgang wird in der Regel durch Installationsprogramme realisiert. Bei Betriebssystemen wird die Installation auch als das „Aufsetzen“ eines Computers bezeichnet, da dieser ohne ein auf einem austauschbaren Datenspeicher (z. B. einer Festplatte) aufgespieltes Betriebssystem normalerweise nicht direkt nutzbar ist. Das Installationsprogramm muss dazu von einem bootfähigen Medium starten, das oft eine spezielle Version eines Live-Systems inklusive (meist automatisch ausgeführtem) Installationsprogramm enthält. Nicht nur bei Betriebssystemen wird der gesamte Installationsvorgang oft auch als Setup (englisch für Aufbau oder Konfiguration) bezeichnet, beispielsweise unter den Betriebssystemen MS-DOS/​PC DOS, OS/2 und Windows, aber auch bei zahlreichen Anwendungsprogrammen.
Eine Alternative stellt die sog. Paketverwaltung dar, wobei die installierten Programme als Pakete im System installiert und konfiguriert werden. Die Paketverwaltung kümmert sich dabei meist auch um die Aktualisierung der Pakete – und damit der einzelnen Programme – sowie um die Auflösung von Konflikten. Vor allem im Unix-Umfeld sind unterschiedliche Paketmanager verbreitet, mit winget steht ein solcher jedoch auch auf Windows-Betriebssystemen (ab Windows 10 Version 1709) zur Verfügung.

## Ziel

Eine erfolgreiche Installation ist eine Voraussetzung für das Funktionieren vieler Computerprogramme. Je komplexer das Programm ist, das heißt unter anderem, aus je mehr einzelnen Dateien (oder gar Dateiänderungen) an je mehr unterschiedlichen Orten ein Programm besteht, desto größer ist das Risiko, dass bei der Installation ein Fehler auftritt. Schlägt die Installation auch nur teilweise fehl, kann das Programm häufig nicht verwendet werden. Daher ist, insbesondere bei umfangreichen Programmen, die Entwicklung eines zuverlässigen Installationsvorgangs ein – auch hinsichtlich des Aufwands – wesentlicher Bestandteil der Softwareentwicklung.
Der Begriff Deinstallation bezeichnet den umgekehrten Vorgang, also das Entfernen von Software.

## Verfahren

Mit dem Aufkommen des Internets und schneller Netzwerkverbindungen haben sich neue Techniken zur Verteilung, Installation und Aktualisierung von Programmen entwickelt.
* Bei Windows: Hotfixes und Service Packs: Nur bestimmte Teile des Produkts werden aktualisiert. Setzt eine vorhandene Installation voraus. Auf der Windows Installer-Technologie basierende Update-Pakete sowie Updates für Windows selbst können in der Regel auch in die Installationsdateien integriert werden, was Slipstreaming genannt wird.
* Inkrementelle Installation: Periodisch oder durch Aufruf des Anwenders prüft das Programm anhand einer zentralen Quelle (zum Beispiel einer im Internet abgelegten Liste), ob die installierte Version aktuell ist. Falls die Version veraltet ist und aktualisiert werden kann, fragt das Programm meist beim Anwender nach und lädt dann gezielt diejenigen Dateien herunter, die aktualisiert werden müssen.
* Automatische Aktualisierung / Replikation: Bei jedem Start des Programms wird überprüft, ob die installierte Version aktuell ist. Falls Aktualisierungen verfügbar sind, werden diese ggf. ohne Rückfrage an den Anwender automatisch heruntergeladen und installiert. Dieses Verfahren funktioniert nur, wenn verlässliche und schnelle Netzwerkverbindungen vorhanden sind.
* Server-Installation: Das Programm wird nicht auf dem Computer des Anwenders („Client“) installiert, sondern zentral auf einem Server abgelegt. Beim Start des Programms vom Client aus (Link) wird es über das Netzwerk in den Arbeitsspeicher des Clients geladen.
* Server-Anwendung: Die Anwendung wird nicht mehr auf dem Computer des Anwenders („Client“) installiert, sondern stattdessen auf dem Server installiert und ausgeführt. Beispiele hierfür sind Windows Terminal Services, Web-Anwendungen (besser HTTP-Anwendungen), Berichtgeneratoren und Backup-Office-Produkte.
* Unbeaufsichtigte Installation oder Silent Installation: Die Installation erfolgt ohne Benutzereingriff. Die benötigten Einstellungen werden vorher in einem Skript festgelegt und gespeichert oder als Parameter übergeben. Dadurch ist es möglich, Prozesse, die sich oft wiederholen, zu automatisieren.
* Virus, Agent, Spyware, Dialer…: Die Hersteller von unerwünschten Programmen machen sich die oben beschriebenen Möglichkeiten ebenfalls zunutze. Oft kommt diese Software als Bestandteil von zum Beispiel Shareware. Einmal auf dem System, laden solche Programme aus dem Internet weitere Bestandteile herunter. Es ist lediglich notwendig, einen Einsprungspunkt zu bekommen – danach können beliebig viele weitere Bestandteile der Schadsoftware (schrittweise) nachinstalliert werden, ohne dass der Anwender dies überhaupt bemerkt. Diese Methode ist so erfolgreich, dass Hersteller seriöser Produkte beginnen, auf diese Techniken zurückzugreifen, beispielsweise für Inventarisierungssoftware oder Virenscanner. Zunächst wird einmal ein minimaler „Agent“ installiert, der dann Replikation einsetzt. Allerdings wird die initiale Verteilung dabei von einem Verantwortlichen beim Kunden gestartet und nicht wie bei Viren gegen den Willen des Anwenders.

## Alternativen

In den letzten Jahren sind immer leistungsfähigere Standards und Techniken entwickelt worden, um den Installationsvorgang zu vereinfachen und zu standardisieren. Für eine Programm-Installation können beispielsweise folgende grundlegende Methoden angewandt werden:
* Das Programm wird mittels eines einfachen Kopiervorgangs an einem beliebigen Ort installiert. Diese Methode ist einfach und intuitiv und die bevorzugte etwa unter macOS. Ein Risiko ist, dass zum Beispiel alte Versionen desselben Programms an anderen Orten unbemerkt liegen bleiben können. Falls außer der Programmdatei weitere Dateien benötigt werden, ist die Methode nicht geeignet.
* Wie zuvor, aber das Programm installiert beim ersten Start automatisch fehlende Dateien an den vorgesehenen Orten.
* Das Programm wird nicht als solches geliefert, sondern es wird lediglich ein Installations-Programm geliefert, mit welchem das eigentliche Programm dann installiert wird.
* Das Programm wird als Paket geliefert. Dies ist im Allgemeinen ein Archiv, das heißt eine Datei, welche alle benötigten Dateien und (De-)Installations-Routinen enthält. Durch Ausführung des Archivs wird ein Installationsprogramm gestartet, welches Bestandteil des Betriebssystems ist. Unter Mac OS X sind dies etwa Dateien vom Typ .pkg oder .mpkg, die mittels des systemeigenen Installationsprogramms geöffnet werden. Unter Debian und anderen Linux-Distributionen werden Programme als .deb-Archive mit dem Advanced Packaging Tool (kurz APT) von einem zentralen Server heruntergeladen und dann installiert.
Softwarenutzung ohne tiefgreifende Installation ist zum Beispiel möglich durch portable Software oder in Linux-Systemen mittels Klik.

## Installations-Schritte
### Bootstrapping

Sogenanntes Bootstrapping ist notwendig, wenn die Installation von einem auf dem System bereits installierten oder ins Betriebssystem integrierten Package-Manager oder -Installer durchgeführt werden soll. In diesem Fall kann es passieren, dass dieser vor der eigentlichen Installation auf einen neuen Versionsstand gebracht werden muss. Hierzu wird ein kleines Programm (meist Setup.exe genannt) gestartet, welches das Upgrade für den Installer oder Package Manager durchführt und danach die eigentliche Installation startet. Dieses Programm wird Bootstrapper genannt.

### Prüfung

Vor der eigentlichen Installation (Kopieren, Registrieren) prüfen viele Installationsprogramme, ob die neu zu installierende Anwendung überhaupt für das System geeignet ist. Dabei wird die Hardwareausstattung überprüft, die Version des Betriebssystems und die anderen bereits installierten Programmkomponenten. Im Rahmen der Prüfung wird festgelegt, welche Dateien, Bibliotheken, Komponenten (siehe unten) und Konfigurationsdaten benötigt werden.
Weiterhin sollte die „Integrität“ der Installationsdateien geprüft werden, das heißt, es sollte sichergestellt sein, dass die Dateien beziehungsweise das Archiv nicht beschädigt sind (zum Beispiel über eine Prüfsumme).

### Kopieren von Dateien

Moderne Programme bestehen aus einer oft großen Anzahl unterschiedlicher Dateien:
* Hauptanwendung
* Datendateien, zum Beispiel Datenbank, XML-Dokumente, Vorlagen
* Onlinehilfe
* Konfigurationsdateien
* Bibliotheken
* Komponenten
* Verweise
Im Allgemeinen werden diese in ein (neues) Verzeichnis auf dem Computer kopiert. Mitunter müssen einige der Dateien aber auch in allgemeine Verzeichnisse oder Verzeichnisse des Betriebssystems kopiert werden.
Weiterhin ist es meist sinnvoll oder gar notwendig, alte Versionen des Programms vorher zu beseitigen – dies nennt man Deinstallation.

### Bibliotheken und Komponenten

Bibliotheken und Komponenten sind durch mehrere Programme genutzte Softwarebausteine. Bei der Installation müssen sie gegebenenfalls mit installiert werden. Es werden dabei oft ältere Versionen, die durch andere Anwendungen oder das Betriebssystem vorher installiert wurden, ersetzt. Sie müssen beim System registriert werden, das heißt auf eine vom System definierte Weise bekannt gemacht werden. Dies ist insbesondere bei Windows-Programmen ein kritischer Punkt.

### Registrierung beim Betriebssystem

Ein Hauptunterschied zwischen einem reinen Kopieren einer Anwendung und einer Installation ist, vom Betriebssystem gegebenenfalls vorgesehene, Aufrufe oder Registrierungen vorzunehmen. Im Unterschied zu Bibliotheken und Komponenten dient dieser Punkt der Bekanntmachung der Anwendung beim Betriebssystem. Dies gilt insbesondere für Betriebssysteme mit grafischen Oberflächen. Schon das Ablegen eines Icons auf dem Desktop oder eine Ermöglichung eines Starts durch eine Tastenkombination ist eine solche Registrierung. Meist dient die Registrierung auch dazu, (über Bedienelemente des Betriebssystems) die installierten Anwendungen benutzerfreundlich anzuzeigen, zu deinstallieren oder auch zu ändern oder upzudaten.
Unter Windows ist dies etwa über die Systemsteuerung möglich, ab Windows 8 hieß dieser Punkt „Programme und Features“, ab Windows 10 „Apps und Features“, in Windows 7 hieß dieser Punkt „Software“. In windows-spezifischen Installationsprogrammen wie etwa MSI und Fachkreisen ist dieser Bereich auch als ARP bekannt, da die ursprüngliche englische Bezeichnung „Add/Remove Programs“ hieß.

### Konfiguration

Manchmal führt das Installationsprogramm auch eine initiale Konfiguration des installierten Programms durch. Dazu prüft es das System oder befragt den Anwender nach den notwendigen Einstellungen, zum Beispiel der Art und Geschwindigkeit der Netzwerkanbindung. Dabei muss zwischen benutzerspezifischen und Computer-spezifischen Einstellungen unterschieden werden: Die ersteren betreffen nur den aktuell angemeldeten Benutzer, während letztere sämtliche Benutzer des Systems betreffen.

### Abschluss der Installation

Insbesondere wenn Bibliotheken ausgetauscht wurden, muss das System unter Umständen komplett oder in Teilen (etwa der Drucker-Dienst) neu gestartet werden, um die Änderungen wirksam werden zu lassen. Die Ursache liegt meist darin, dass die betroffenen Dateien, Dienste und Protokolle zum Zeitpunkt der Installation bereits in Verwendung sind und daher nicht sofort aktualisiert werden können. Tritt diese Situation auf, sind folgende Lösungen möglich:
* Kann die zu aktualisierende Datei ausgetauscht werden, ohne dass die Änderung wirksam wird, ist es ausreichend, den Dienst (zum Beispiel die grafische Benutzeroberfläche oder den Druckdienst) beziehungsweise das System neu zu starten, sodass beim nächsten Start die neue Datei verwendet wird.
* Kann oder darf die Datei nicht im Betrieb ausgetauscht werden, hinterlegt das Betriebssystem eine Liste mit den verbleibenden Aktionen und führt diese beim nächsten Neustart des Systems aus. Zu diesem Zeitpunkt sind die Bibliotheken noch nicht in Benutzung und können ausgetauscht werden. Insbesondere bei Hardwaretreibern, welche die Schnittstelle zwischen Betriebssystem und Hardware bilden, ist dies oft der Fall.

## Installationsprogramme

Ein Installationsprogramm, umgangssprachlich auch kurz Installer genannt, ist ein Programm, das eine Installation vornimmt. Es können drei Formen unterschieden werden:
* Programme wie der Windows Installer installieren die in einem separaten Installationspaket enthaltene Software.
* Zum Download vorgesehene Software wird oft in Form eines Installers verteilt, der sowohl das Installationsprogramm als auch die verteilte Software enthält (vergleiche Selbstextrahierendes Archiv)
* Bei Software auf CD-ROM/DVD-ROM liegen Installationsprogramm und Software meist getrennt vor.
Ein derzeit sehr populäres Format für Windows ist das MSI-Installationspaket, das vom Windows Installer installiert wird. Von Unternehmen hergestellte Tools, um Installationsprogramme für Windows herzustellen, sind z. B. InstallShield, SetupBuilder, Wise, ScriptLogic (vorher MaSaI Solutions), InstallAware, das Multiplattform-Tool InstallBuilder von BitRock (für Open-Source-Programme kostenlos) und OnDemand. Die meisten dieser Tools können sowohl MSI-Pakete als auch reguläre Standalone-Installer in Form einer ausführbaren Datei erzeugen. Für eComStation gibt es das Programm WarpIn für denselben Zweck.
Freie Alternativen sind z. B. NSIS, FWPinstaller, Inno Setup, IzPack, InstallForge und WiX (von Microsoft) für Windows, Checkinstall für Linux.
Viele Programme können auch ohne Installationsprogramm durch einfaches Kopieren der Dateien installiert werden. Voraussetzung hierfür ist, dass weder Registry-Einträge erstellt noch tiefergehende Änderungen am System vorgenommen werden müssen. Außerdem müssen Verknüpfungen oder Einträge im Startmenü manuell erstellt werden.
Bei Installationsprogrammen auf CD-ROM oder DVD für Windows wird oft die Autorun-Funktion verwendet, um sie beim Einlegen automatisch starten zu lassen.
* RPM, ein allgemeines Paketmanagement für Linux, das unter anderem von SuSE Linux, Red Hat und Mandriva Linux verwendet wird
* Ports, das Paketmanagement von BSD, Gentoo Linux nutzt ein ähnliches System namens Portage, das auf sogenannten Ebuilds basiert
* Advanced Packaging Tool (APT), das Paketmanagement von Debian und Ubuntu
* Windows Installer, ein Installationssystem von Microsoft, dessen Installationsdateien auf MSI-Datenbanken basieren. Der Installer sammelt die auszuführenden Aktionen und Änderungen am System in Tabellen und stellt erweiterte Funktionen bereit, wie das Anpassen von Installationen, das Patch-Management für neue Versionen sowie ein Rollback bei fehlgeschlagener Installation.
* Installationsprogramm (Mac OS X) (englisch) „Installer“: Standard-Installationsprogramm von Mac OS X, Bestandteil des Betriebssystems.
* InstallShield, einer der meistverwendeten Installer für Windows-Systeme
* InstallForge, kostenloses Installationssystem mit einfacher Bedienung für Windows
* Inno Setup, freies Installationssystem für Windows
* Nullsoft Scriptable Install System, ein freies, unter Windows weitverbreitetes Tool zur Erstellung von Installations-Programmen, welches über eine einfache, aber mächtige Skript-Sprache verfügt und selbst nur wenig Aufwand benötigt.
* InstallerFramework, eine auf dem .Net Framework basierende Bibliothek für Setups.
* WarpIn für OS/2 und eComStation
* Mit dem Package-Launcher können Softwarepakete in Windows Systemen mit beliebigen Installationsquelltypen (MSIs, MSPs, MSUs, App-V, Legacy Setups, Scripts) automatisch erstellt und für die Softwareverteilung in die Softwareverteilungsinfrastruktur überführt werden.

## Aspekte
### Deinstallations- und Updatefähigkeit

Bereits die Installation eines Programmes hat für Deinstallation und Updatefähigkeit vorzusorgen, vereinfacht gesagt, dass dieses wieder (einfach und zuverlässig) deinstallierbar ist, dass andere Anwendungen oder die Systemstabilität auch durch eine Deinstallation nicht negativ beeinflusst werden. Je nach Betriebssystem ist auch die Reparaturfähigkeit der Anwendung zu gewährleisten, etwa bei Windows.

### Stabilität

Eine Installation muss stabil sein, das heißt, sie muss zuverlässig und ohne Fehler oder Schwierigkeiten durchführbar sein.

### Sicherheit

Für die Installation von Software sind bei aktuellen Betriebssystemen (Linux, Windows, macOS) oft administrative Berechtigungen notwendig. Ein normaler Anwender hat wegen des hohen Risikos nicht die Berechtigung, Installationen durchzuführen.
Ausführbare Installationsprogramme, die (beispielsweise) mit Inno Setup, Nullsoft Scriptable Install System, WiX Toolset etc. erzeugt wurden, sowie selbstextrahierende Archive, die (beispielsweise) von 7-Zip, IExpress, WinRAR, WinZip etc. erzeugt wurden, sind insbesondere dann, wenn sie in von normalen Anwendern beschreibbaren Verzeichnissen wie dem Downloads- oder Temp-Ordner ausgeführt werden, anfällig für DLL Hijacking.
Leistungsfähige Installationswerkzeuge erlauben auch das Rückgängigmachen einer oder mehrerer Installationen (sogenannter transaktionsbasierter Rollback). Dabei ist es manchmal auch möglich, ein System auch auf den Stand zu einem bestimmten Zeitpunkt zurückzusetzen. Dies ist auf produktiv eingesetzten Servern wichtig, wenn mehrere gemeinsam installierte Patches zu einem Fehlverhalten der Maschine geführt haben.

### Mögliche Probleme

* Generell: Es können Fehler dadurch auftreten, dass Annahmen, die der Entwickler des Installationsvorgangs getroffen hat, nicht stimmen. Der Entwickler sollte möglichst keine Annahmen treffen müssen.
* beschädigte Dateien
* fehlende Dateien
* unzureichende Berechtigungen/Rechte
* undefinierter Systemzustand nach Abbruch der Installation
* unsaubere Deinstallation
* Installation löscht oder manipuliert Dateien, die auch für andere Applikationen von Bedeutung sind
* Windows-DLL-Konflikt

### Zu klärende Fragen

* Sind die Installations-Dateien vor unbefugtem Zugriff zu schützen?
* Wird die Installation durch einen Administrator oder vom Benutzer selber ausgelöst?
* Wie sollen Programm-Aktualisierungen verteilt werden? (automatisch/nur durch den Systemverwalter/durch den Anwender)
* Lässt sich die Installations-Routine durch den Administrator nachträglich anpassen?
* Wie wird die Installation lokal und/oder zentral protokolliert?
* Wie kann der Installationsstatus einer Applikation netzwerkweit überprüft werden?
* Welche Rechte/Berechtigungen sind zur Durchführung der Installation notwendig?
* Besteht Bedarf an signierten Installations-Dateien, um beispielsweise die Authentizität der Dateien überprüfen zu können (vermeiden von „gefälschten“ Applikationen, um zum Beispiel Viren einzuschleusen)?

### Anforderungen

* Es soll einfach sein (XCOPY Deployment = Programm auf den Rechner kopieren, und es läuft)
* Es soll keine Nebenwirkungen auf andere Programme haben
* Aktualisierungen und Fehlerkorrekturen (englisch „updates/bug fixes“) sollen leicht und möglichst automatisch installierbar sein.