Zentrale Netzwerk-Installation für Windows (QGIS-Setup für Softwareverteilung)

Häufige Release-Wechsel von QGIS lassen vor allem in größeren Organisationen mit zahlreichen QGIS-Installationen schnell den Ruf nach einer zentralen Netzwerk-Installation aufkommen, die eine Auslieferung der Software auf Windows-Clients ermöglicht. QGIS bietet diese Option von Haus aus nicht.

Es gibt aber die Möglichkeit, auf einem Windows-PC eine Standardinstallation von QGIS-Desktop vorzunehmen und den Installationsordner zentral im Netzwerk abzulegen. Mit einigen wenigen Anpassungen kann man von da aus

  1. den Installationsordner entweder schlicht auf einen Client-PC kopieren,
  2. aus dem Installationsordner ggf. mit weiteren Anpassungen ein neues Setup generieren, dass über eine Softwareverteilung auf die Clients ausgeliefert wird
  3. oder QGIS gar über eine Desktop-Verknüpfung direkt von diesem Ort aus starten Zentrale Installation auf einem Applikationsserver.

Alle Varianten funktionieren aus eigener Erfahrung des Autors erstaunlich gut und zuverlässig. Persönliche Einstellungen der Oberfläche (Werkzeugkästen, Übersicht der kürzlich verwendeten Projekte etc.) bleiben nach dem ersten Start von QGIS erhalten.
Dreh- und Angelpunkt einer zentralen Installation sind die QGIS-Startparameter „profile-path“ und ggf. „profile default“. Bei einer Standardinstallation legt QGIS beim ersten Start einen persönlichen Ordner namens „C:\Users\<Benutzername>\AppData\RoamingQGIS\QGIS3“ an. 1) Hier werden die persönlichen Einstellungen des jeweiligen Anwenders abgelegt. Mit dem Startparameter „profile-path“ kann man nun das Verzeichnis für den QGIS3-Ordner neu festlegen, mit dem Parameter „profile default“ definiert man ein konkretes Profil, dass beim Start von QGIS3 zur Anwendung kommt.
Die nachfolgenden Ausführungen basieren im wesentlichen auf den Artikeln von Bo Victor Thomsen, Kommune Frederikssund, Dänemark:

Die Artikel beziehen sich allerdings noch auf QGIS 2.x. Für QGIS 3 mussten die der Dokumentation zugrundeliegenden Batch-Dateien u.a. wegen geänderter Startparameter und der Möglichkeit, Benutzer-Profile zu verwenden, angepasst und erweitert werden.
Die Variante 3 wird an dieser Stelle beschrieben. Im Folgenden werden nur die Varianten 1 und 2 einer zentralen Netzwerk-Installation für die QGIS LTR-Version (QGIS 3.4.x) beispielhaft genauer beschrieben. Die Einrichtung gliedert sich in drei Aufgabenbereiche. Während der Prepare-Phase muss zunächst eine herkömmliche QGIS-Installation durchgeführt werden, die im Anschluss angepasst und schließlich auf ein Netzlaufwerk kopiert wird. Im zweiten Schritt wird eine neue „QGIS-Setup.exe“ erstellt, die unternehmensweite (Vor-)Einstellungen berücksichtigt. Und im dritten Schritt muss diese Setup-Datei entweder direkt auf die Clients ausgeführt oder per Softwareverteilung „installiert“ werden.

Kurzfassung

  1. QGIS Einzelplatzinstallation nach z.B. C:\Program Files\qgis-ltr installieren
  2. Dateien aus diesem Archiv 2) nach C:\Program Files\qgis-ltr\bin bzw. C:\Program Files\qgis-ltr\apps\qgis-ltr\resources entpacken
  3. qgis-ltr-grass7.bat nach qgis-ltr-grass7.bat.orig umbenennen (kann später gelöscht werden)
  4. qgis-ltr.bat nach qgis-ltr.bat.orig umbenennen (kann später ebenfalls gelöscht werden)
  5. Datei qgis-ltr-start-prepare.bat ausschließlich mit Admin-Rechten ausführen! Im QGIS Programm-Ordner wird ein neues Verzeichnis namens qgis_template angelegt. Hier werden während der Prepare-Phase nun sämtliche Konfigurationen abgespeichert.
  6. Voreinstellungen vornehmen, ggf. mehrfach wiederholen:
    • „Einstellungen → Optionen“ anpassen: z.B. KBS, Darstellung, Kartenwerkzeuge, Layouts
    • gewünschte Plugins installieren und aktivieren
    • Anpassung der Bedienfelder / Werkzeugkästen
    • Einstellungen für das Prozessing überprüfen / vornehmen
    • ggf. Einstellungen unter Projekteigenschaften vornehmen
    • ggf. Datenbankverbindungen einrichten
    • ggf. WMS-Dienste einrichten
  7. Vorbereitenden Arbeiten zur QGIS-Installation auf den Clients
    • Erstellen einer qgis-ltr-postinstall.bat für ein Setup per Softwareverteilung
    • ggf. Schrift-/Symbolfonts kopieren und über entsprechende *.reg-Dateien deren Registrierung ermöglichen
    • Setup-Dateien der benötigten Microsoft Visual C++ Redistributables nach C:\Program Files\qgis-ltr\bin kopieren (Quellen: 64bit Versionen bzw. 32bit-Versionen)

      Hinweis: Hier reichen auch die DLL's (aktuell: msvcp100.dll/msvcr100.dll, msvcp110.dll/msvcr110.dll, msvcp120.dll/msvcr120.dll, msvcp140.dll/msvcp140_1.dll/msvcp140_2.dll/ vcruntime140.dll)!

  8. Kontrolle, ob sich die DLL's opencl.dll, libeay32.dll und ssleay32.dll noch unter C:\Program Files\qgis-ltr\bin befinden. Während der Standardinstallation werden die Dateien nämlich im Verzeichnis C:\Windows\system32 (32bit) bzw. C:\Windows\SysWOW64 (64bit) aktualisiert, wenn die dort abgelegten DLL's einen älteren Stand als die im QGIS bin-Verzeichnis haben. Vorsicht: In diesem Fall werden die DLL's aus dem QGIS bin-Verzeichnis gelöscht! Falls die o.g. Dateien im QGIS bin-Verzeichnis also fehlen sollten, bitte wieder dort hineinkopieren! Führt man diesen Schritt nicht aus, fehlt die Datei auf den Clients und es kommt zu einer Fehlermeldung beim Start von QGIS. QGIS startet dann nicht!
  9. Zum Abschluss den gesamten Ordner C:\Program Files\qgis-ltr auf ein Netzlaufwerk kopieren
  10. QGIS-Setup.exe erstellen (z.B. mit Inno Setup)
  11. Installation auf den Clients
    • von Hand durch Ausführen der setup.exe mit Administratorrechten., Nachfragen beantworten und ggf. Neustart abnicken.
    • Installation per Softwareverteilung. Unterdrückung der Benutzerdialoge mit folgenden Parametern:
      setup.exe /silent /norestart

Erläuterung

Vorab: Grundsätzlich sollte die QGIS-Installation für die Vorbereitungsphase auf dem System durchgeführt werden, auf denen QGIS später auch laufen muss (z.B. Windows 10). Dafür bieten sich ggf. virtuelle Maschinen an. Umfangreiche Tests haben ergeben, dass sich eine Installation z.B. auf einem Windows Server Betriebssystem nicht eignet, da es immer wieder Probleme mit der deutschen Benutzeroberfläche gegeben hat. So wurden beispielsweise die Schaltflächen der Dialogfenster nicht durchgängig in Deutsch beschriftet. Führt man die Vorbereitungsphase jedoch auf dem jeweiligen Zielsystem durch, gibt es hinterher auf den Clients keine derartigen Probleme.
Hält man sich an der Vorgabe der Anleitung von Frederikssund und installiert die QGIS-Vorlage nicht im Programme-Verzeichnis, gibt es später ebenfalls Probleme bei Verwendung der deutschen Oberfläche. Auch in diesem Fall werden in einigen Dialogen die Dialog-Buttons („Ok“, „Abbrechen“ etc.) nicht auf Deutsch beschriftet.
Außerdem sollte man das Userverzeichnis „…\.qgis_template“ nach „…\qgis_template“ umbenennen. Mit führendem „.“ (Punkt) im Dateinamen kommt Windows nicht so gut zurecht :-).

Arbeitsschritt 1

Das Zielverzeichnis ist frei wählbar. Im produktiven Umfeld kann es sich ob der höheren Stabilität auszahlen, die LTR-Version von QGIS zu installieren (LTR = Long Term Release).

Hinweis: Der Autor vermeidet die Verwendung von Versionsnummern im Verzeichnisnamen. Da regelmäßig Aktualsierungen der QGIS-Installation erforderlich werden, muss man andernfalls immer wieder die Verzeichnisnamen in den diversen Batch-Dateien und den Profilen auf den Clients anpassen.

Arbeitsschritt 2

Achtung: Mit der Version 3.4.7 hat sich der Umgang mit den GRASS-Funktionen geändert. Startet man die „normale“ QGIS-Anwendung über die qgis-ltr.bat ohne den Zusatz „with GRASS“, funktionieren in den Processing-Tools die GRASS-Funktionen nicht mehr. Beim Aufruf der GRASS-Funktionen erscheint dann eine Fehlermeldung. Nach Aussage von Herrn Fischer hängt das mit einer zentralen Variable für die GRASS-Installation zusammen. Diese Variable wird aber nur gesetzt, wenn auch GRASS aktiviert wird. Darum sollte man fortan besser auf die qgis-ltr-bin-g7.exe verweisen. Darüber hinaus müssen in den Batch-Dateien die entsprechenden GRASS-Pfade ergänzt werden. Erst dann funktioniert der Zugriff auf die GRASS-Funktionen wieder.

Bei der Ersteinrichtung der QGIS Setup-Datei sind die herunterzuladenen Dateien an die individuellen Gegebenheiten anzupassen. Später können die Dateien aus vorhandenen Installationen wiederverwendet werden.
Alternativ kann man auch eine Kopie der Datei „C:\Program Files\qgis-ltr\bin\qgis-ltr-grass7.bat“ erstellen, nach „qgis-ltr-start-prepare.bat“ umbenennen und mit folgendem Inhalt versehen:

@echo off
call "%~dp0\o4w_env.bat"
call "%OSGEO4W_ROOT%\apps\grass\grass76\etc\env.bat"
call qt5_env.bat
call py3_env.bat
@echo off
path %OSGEO4W_ROOT%\apps\qgis-ltr\bin;%OSGEO4W_ROOT%\apps\grass\grass76\lib;%OSGEO4W_ROOT%\apps\grass\grass76\bin;%PATH%
set QGIS_PREFIX_PATH=%OSGEO4W_ROOT:\=/%/apps/qgis-ltr
set GDAL_FILENAME_IS_UTF8=YES
rem Set VSI cache to be used as buffer, see #6448
set VSI_CACHE=TRUE
set VSI_CACHE_SIZE=1000000
set QT_PLUGIN_PATH=%OSGEO4W_ROOT%\apps\qgis-ltr\qtplugins;%OSGEO4W_ROOT%\apps\qt5\plugins

set "QGIS_UDIR=%USERPROFILE%\AppData\Roaming\QGIS\qgis-ltr"

REM Modus setzen (RUN|) ["RUN" für Nutzerbetrieb; leer lassen für Konfigurationsmodus]
REM set "QGIS_MODE=RUN"
set "QGIS_MODE="
call "%OSGEO4W_ROOT%\bin\qgis-ltr-prepare.bat" %QGIS_MODE%

REM start "QGIS" /B "%OSGEO4W_ROOT%\bin\qgis-ltr-bin-g7.exe" %*
REM start "QGIS" /B "%OSGEO4W_ROOT%\bin\qgis-ltr-bin-g7.exe" --profiles-path "%QGIS_UDIR%" --profile default %*
start "QGIS" /B "%OSGEO4W_ROOT%\bin\qgis-ltr-bin-g7.exe" --profiles-path "%QGIS_UDIR%" %*

Arbeitsschritte 3 - 5

Selbsterklärend!

Arbeitsschritt 6

  • Einstellungen → Optionen

    Hinweis: Startet man QGIS in der Prepare-Phase mit Admin-Rechten, werden die Netzwerk-Laufwerke nicht angezeigt. Bei Eingabe von Verzeichnispfaden muss man UNC-Pfade eingeben!

    • „Allgemein“, beispielsweise → Vorlagenverzeichnis einstellen, Option „QGIS-Version beim Start überprüfen“ deaktivieren
    • „System“, beispielsweise → SVG-Pfade einstellen

      Hinweis: Hinweis: Diesen Pfad bitte nach einem Neustart von QGIS in der Prepare-Phase kontrollieren. Der Pfad wird häufig nicht übernommen und muss mit einem Backslash „\“ enden! Der Pfad wird im Profile-Ordner …\qgis_template\profiles\default\QGIS\QGIS.ini im Abschnit „[svg]“ gespeichert. Ggfs. muss man in dort direkt anpassen / ergänzen!

    • „KBS“, beispielsweise → „Vorgabe-KBS für neue Projekte“ immer mit EPSG:25832 beginnen, „KBS für neue Layer“ immer im EPSG:25832
    • „Datenquellen“, beispielsweise → Unter „Datenquellenbehandlung“ die Option „Shapedatei-Kodierungsangabe ignorieren“ deaktivieren (Häkchen entfernen). Dadurch wird beim Laden einer Shape-Datei die cpg-Datei berücksichtigt und die Umlaute korrekt dargestellt.
    • „Darstellung“, beispielsweise → Option „Layer mit vielen CPU-Kernen parallel zeichnen“ aktivieren
    • „Kartenwerkzeuge“, beispielsweise → „Vordefinierte Maßstäbe“ → vorhandene Liste löschen und über „Aus Datei importieren“ neue/erweiterte Liste einlesen
    • „Zusammenstellung“, beispielsweise → Vorgabeschriftart einstellen, Pfad für Druckvorlagen vorgeben
    • „Netzwerk“, beispielsweise → „Proxy für Webzugriff benutzen → DefaultProxy“ einstellen
  • ggf. Aktualisierung der Erweiterungen, falls noch nicht passiert, beispielsweise → Einbinden eines lokalen Repositories für eigene Plugin-Entwicklungen
  • Installation gewünschter Erweiterungen, beispielsweise → „autoSaver“, „changeDataSource“, „Digitizing Tools“, „Instant Print“ und „QuickMapService“
  • Aktivierung der Erweiterungen (unter „installiert“), den Rest deaktivieren, beispielsweise:
    • autoSaver
    • changeDataSource
    • DB Manager
    • GDAL-Georeferenzierung
    • GdalTools
    • Geometrieprüfung
    • Instant Print
    • MetaSearch Catalogue Client
    • Processing
    • Topologie-Prüfung
  • Bedienfelder und Werkzeugkästen anpassen, beispielsweise → Die „Datenquellenverwaltungsleiste“ und „Vektorwerkzeugleiste“ wieder vertikal an den linken Rand des QGIS-Fensters platzieren.
  • Einstellungen der Verarbeitungsoptionen überprüfen, beispielsweise → Im Reiter „Allgemein“ die Option „Behalte Dialog nach Abschluss des Algorithmus offen“ aktivieren, die Option „Tooltip anzeigen, wenn es abgeschaltete Anbieter gibt“ deaktivieren
  • ggf. muss in den Projekteigenschaften unter „Allgemein → Koordinatenanzeige → Koordinatenanzeige in“ die Option „Karteneinheiten (Meter)“ eingestellt werden. In älteren Projekten kann dort noch „Dezimal Grad“ stehen.
  • PostGIS-Verbindung für zentrale Datenbanken anlegen:
    PostGIS-Verbindung einrichten

    Hinweis: Hier besteht alternativ die Möglichkeit, auf einen mit Hilfe der Datei „pg_service.conf“ angelegten Service (im o.g. Fomular als „Dienst“ bezeichnet) zuzugreifen.

  • ggf. zentral verfügbare WMS-Dienste einrichten, die entweder als interne Dienste von eigenen Mapservern oder im Internet verfügbar sind und häufig verwendet werden

Arbeitsschritt 7

Für die QGIS-Installation auf den Clients müssen einige weitere Vorbereitungen erfolgen. Die Batch-Datei mit Anweisungen zu den Dateiverknüpfungen, Desktop-Symbolen etc. pp. muss vorm bzw. beim ersten Start von QGIS mit Admin-Rechten ausgeführt werden, damit die Änderungen auch in der Registry übernommen werden. Es empfiehlt sich daher, direkt nach der QGIS-Installation die Datei qgis-ltr-postinstall.bat auszuführen, da die Installation ohnehin mit Admin-Rechten durchgeführt wird. Als Grundlage für diese Batchdatei kann man die qgis-ltr-prepare.bat verwenden und beispielsweise folgende Änderungen vornehmen:

  • Datei nach qgis-ltr-postinstall.bat kopieren
  • ggf. Registry-Dateien für zusätzliche Schriftarten nach „C:\Program Files\qgis-ltr\bin“ kopieren
  • Übernahme der ersten Zeilen aus der qgis-ltr-start.bat zum Setzen der Pfade
  • nicht benötigte Zeilen entfernen
  • Für das Desktop-Icon sowie die Einträge im Programme-Verzeichnis sollten die „Öffentlichen Ordner“ verwendet werden, damit unabhängig vom jeweiligen Benutzer, auf QGIS zugegriffen werden kann. Per Default greift die qgis-prepare.bat von Frederikssund nur auf Verzeichnisse des angemeldeten Benutzers zu. Darüber hinaus ist im „Programme“-Verzeichnis der Eintrag für die OSGeo4W Shell nachzutragen (GDAL-Befehle aus der Komandozeile ausführen). Eine gute Übersicht über „offizielle“ Abkürzungen für die benötigten Verzeichnisse gibt es auf dieser Microsoft-Seite Common folder variables. Daraus ergeben sich folgende Änderungen in der qgis-ltr-postinstall.bat:
    REM Create shortcut in the programs group for all user (public)
    if not exist "%ProgramData%\Microsoft\Windows\Start Menu\Programs\QGIS\%QGIS_TEXT%.lnk" (
       nircmd shortcut """%OSGEO4W_ROOT%""\bin\qgis-ltr-start.bat" "%ProgramData%\Microsoft\Windows\Start Menu\Programs\QGIS" "%QGIS_TEXT%" "" """%OSGEO4W_ROOT%""\icons\QGIS.ico" "0" "min" """%OSGEO4W_ROOT%""\bin" ""
       )
    
    if not exist "%ProgramData%\Microsoft\Windows\Start Menu\Programs\QGIS\OSGeo4W Shell.lnk" (
       nircmd shortcut """%OSGEO4W_ROOT%""\OSGeo4W.bat" "%ProgramData%\Microsoft\Windows\Start Menu\Programs\QGIS" "OSGeo4W Shell" "" """%OSGEO4W_ROOT%""\OSGeo4W.ico" "" "" """\" ""
       )
    
    REM Create shortcut on desktop for all user (public)
    if not exist "%PUBLIC%\Desktop\%QGIS_TEXT%.lnk" (
       nircmd shortcut """%OSGEO4W_ROOT%""\bin\qgis-ltr-start.bat" "%PUBLIC%\Desktop" "%QGIS_TEXT%" "" """%OSGEO4W_ROOT%""\icons\QGIS.ico" "0" "min" """%OSGEO4W_ROOT%""\bin" ""
       )
  • ggf. Symbol-Fonts kopieren und registrieren
  • Microsoft Visual C++ Redistributable: Bei der „normalen“ Installation von QGIS 3.4.x werden die entsprechenden Pakete für VC++ 2008 SP1, VC++ 2013 und VC++ 2015 hinzugefügt. Die originalen Pakete werden nach der Installation normalerweise gelöscht. Sie müssen von „O:\GIS-Büro\Software\qgis\1_NetzwerkInstallation\3_Verschiedenes\msvcrt“ wieder in den Ordner „C:\Program Files\qgis-ltr\bin“ kopiert werden. Hier liegen die Original-Quellen, deren Download von hier (X86) bzw. hier (X86_64) erfolgen muss!

    Hinweis: Dort liegen spezielle Versionen:
    64bit: Microsoft Visual C++ 2008 Redistributable - x64 9.0.30729.17 (ServicePack 1 von VC++ 2008), Microsoft Visual C++ 2013 x64 Additional Runtime - 12.0.21005 (VC++ 2013) sowie Microsoft Visual C++ 2015 x64 Additional Runtime - 14.0.23026 (VC++ 2015).
    32bit: Microsoft Visual C++ 2008 Redistributable - x86 9.0.30729.17 (ServicePack 1 von VC++ 2008), Microsoft Visual C++ 2013 x86 Additional Runtime - 12.0.21005 (VC++ 2013) sowie Microsoft Visual C++ 2015 x86 Additional Runtime - 14.0.23918 (VC++ 2015).Bitte nur diese Versionen für das QGIS-Installationspaket verwenden! Anmerkungen: Vor allem die dll-Dateien der älteren Versionen sind unter Windows 7 z.T schwer zu finden. Ein guter Thread zum Thema MS Visual Studio 2008 findet sich hier. Die zugehörigen msv*90.dll's findet man im Verzeichnis „$WINDIR\WinSxS\amd64_microsoft.VC90…“ bzw. „$WINDIR\WinSxS\x86_Microsoft.VC90…“ (32bit)

  • Sind alle Einstellungen vorgenommen, wird der komplette Ordner „C:\Program Files\qgis-ltr“ nach „O:\GIS-Büro\Software\qgis\1_NetzwerkInstallation\qgis-ltr.64bit“ bzw. „O:\GIS-Büro\Software\qgis\1_NetzwerkInstallation\qgis-ltr.32bit“ kopiert.
  • In der Datei qgis-ltr-start.bat muss folgende Zeile geändert werden:
    von:
    set "QGIS_MODE="
    nach:
    set "QGIS_MODE=RUN"

    Die erste Phase der Vorbereitung ist damit abgeschlossen.

Arbeitsschritt 8

Selbsterklärend!

Arbeitsschritt 9

In der zweiten Phase geht es nun darum, ein Installationspaket mit allen erforderlichen Komponenten zu schnüren und als „QGIS-Setup.exe“ abzulegen. Die nachfolgenden Ausführungen verstehen sich als beispielhaftes Vorgehen, dass beim Autor zum Erfolg geführt hat.
Für die Erstellung eines Installationspakets hat sich das Programm „Inno Setup“ bewährt (Homepage). Inno Setup bringt einen eigenen Script-Editor mit (Inno Script Studio), mit dem man das Skript zur Erstellung der Setup-Datei zusammenstellen und editieren kann. Das Skript unterstützt Coding in Pascal. Eine gute Übersicht über die Funktionalitäten erhält man in der Hilfe. Das Programm wird auf einem beliebigen Rechner installiert. Für die Erstellung der Skripte ist folgendes Vorgehen erforderlich:

  1. Inno Script Studio bringt einen Assistenten mit, der bei der Neuanlage eines Skripts behilflich ist. Hier werden zunächst wesentliche Angaben vorgenommen:
    • Nach dem Start fragt das Programm, ob man ein neues Skript mit dem Assistenten erstellen möchte:
      Neues Skript erstellen
      Skript Assistent
    • Allgemeine Informationen zur „QGIS LTR“-Installation:
      QGIS-Informationen
    • Lokales Ziel-Verzeichnis auf dem Client-PC eintragen. Option zur „Änderung des Ziel-Verzeichnisses durch den Anwender“ deaktivieren:
      Ziel-Verzeichnis
    • Option „Keine ausführbare Datei“ aktivieren, QGIS Quell-Ordner (= Installationsordner aus der Prepare-Phase) hinzufügen:
      QGIS-Quell-Ordner
    • Verzeichnisnamen für das Startmenü eintragen. Alle anderen Optionen deaktivieren:
      Startmenü-Eintrag
    • Angaben zur Lizenz etc. leer lassen:
      Lizenzen
    • Setup-Sprache auswählen:
      Setup-Sprache
    • Angaben zu den Compiler-Einstellungen (Ausgabeverzeichnis, Setup-Icon etc.):
      Compiler-Einstellungen
    • Preprozessors benutzen:
      Preprozessor benutzen
    • Skript fertigstellen:
      Skript fertigstellen
  2. Danach öffnet sich der Skript-Editor. Hier überprüft man zunächst die Angaben und nimmt ggf. Korrekturen vor.

    Achtung: Im Script muss der Parameter „DefaultDirName“ im Abschnitt „Setup“ auf „C:\Program Files\qgis_ltr“ gesetzt sein!

  3. Im Abschnitt [Setup] sind folgende Zeilen zu ergänzen:
    AppComments=mailto:<Email-Adresse>
    AppContact=<Organisation - Abteilung>
    AppSupportPhone=<Telefonnummer>
    AlwaysRestart=yes
    PrivilegesRequired=admin

    Wenn im weiteren Verlauf Schriftarten hinzugefügt und registriert werden, ist ein Neustart erforderlich (AlwaysRestart=yes). Der Anwender wird jedoch gefragt, ob er diesen Neustart unmittelbar nach der Installation vornehmen oder auf einen späteren Zeitpunkt verschieben möchte!

  4. Neuen Abschnitt namens [Run] anlegen. Hier müssen Einträge hinzugefügt werden, die nach der Kopie des QGIS-Verzeichnisses (Abschnitt [Files]) ausgeführt werden sollen (Beispiel 64bit-Variante):
    Filename: "{app}\bin\qgis-ltr-postinstall.bat"; Description: "Benutzerverzeichnis erstellen, Dateiverknüpfungen setzen"; Flags: shellexec waituntilterminated
    Filename: "{app}\bin\vcredist-2008-sp1-x64.exe"; Parameters: "/qb"; Check: IsWin64 and not VC2008installed
    Filename: "{app}\bin\vcredist-2013-x64.exe"; Parameters: "/install /passive"; Check: IsWin64 and not VC2013installed
    Filename: "{app}\bin\vcredist-2015-x64.exe"; Parameters: "/install /passive"; Check: IsWin64 and not VC2015installed

    Die qgis-ltr-postinstall.bat stellt in der Registry die Dateiverknüpfungen her, kopiert ggf. die gewünschten Schriftarten, erstellt die Startmenü-Eintrage, platziert das Desktop-Icon und kopiert die Konfigurationsdatei in das dafür vorgesehene Benutzerverzeichnis (s. o.). Danach werden die erforderlichen Visual C++-Bibliotheken installiert, so sie nicht bereits installiert sind.
    Hinweis: Die „Parameters“-Angaben dienen zur „Silent installation“ ohne Nachfragen an den Anwender.

  5. Schließlich muss der Abschnitt [Code] angelegt werden. Für die 64bit-Version von QGIS muss hier zunächst überprüft werden, welche Betriebssystem-Version vorliegt (32bit oder 64bit) und ob die VC++-Bibliotheken bereits installiert sind (Beispiel für Windows 7 Professional, QGIS LTR 3.4.11, 64bit-Version):
    [Code]
     // Überprüfen, welche Betriebssystem-Version installiert ist!
     // Unterlässt man dies, wird auf 64bit-Systemen im falschen Registry-Zweig gesucht
     function GetHKLM: Integer;
     begin
      if IsWin64 then
        Result := HKLM64
      else
        Result := HKLM32;
     end; 
    
     function VC2008installed: Boolean;
     // Function for Inno Setup Compiler
     // Returns True if same or later Microsoft Visual C++ 2008 SP1 Redistributable is installed, otherwise False.
     var
      //dn: String;
      version: Cardinal;
      major: Cardinal;
      minor: Cardinal;
      key: String;
      begin
      Result := False;
      key := 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{8220EEFE-38CD-377E-8595-13398D740ACE}';
      //if RegQueryStringValue(HKEY_LOCAL_MACHINE, key, 'DisplayName', dn) then begin
      if RegQueryDWordValue(GetHKLM, key, 'Version', version) then begin
        if RegQueryDWordValue(GetHKLM, key, 'VersionMajor', major) then begin
          if RegQueryDWordValue(GetHKLM, key, 'VersionMinor', minor) then begin
                //Log('VC 2008 Redist DisplayName is: ' + dn );
                Log('VC 2008 Redist Version is: ' + IntToStr(version) + ' Minor is: ' + IntToStr(major) + ' Bld is: ' + IntToStr(minor));
                // Version info was found. Return true if later or equal to our 14.0.24212.00 redistributable
                // Note brackets required because of weird operator precendence
                //Result := (dn = 'Microsoft Visual C++ 2008 Redistributable - x64 9.0.30729.17')
                Result := (version >= 151025673) and (major >= 9) and (minor >= 0)
          end;
        end;
      end;
     end;
     
     function VC2013installed: Boolean;
     // Function for Inno Setup Compiler
     // Returns True if same or later Microsoft Visual C++ 2013 Redistributable is installed, otherwise False.
     var
      major: Cardinal;
      minor: Cardinal;
      bld: Cardinal;
      rbld: Cardinal;
      key: String;
      begin
      Result := False;
      key := 'SOFTWARE\Wow6432Node\Microsoft\VisualStudio\12.0\VC\Runtimes\x64';
      if RegQueryDWordValue(HKEY_LOCAL_MACHINE, key, 'Major', major) then begin
        if RegQueryDWordValue(HKEY_LOCAL_MACHINE, key, 'Minor', minor) then begin
          if RegQueryDWordValue(HKEY_LOCAL_MACHINE, key, 'Bld', bld) then begin
            if RegQueryDWordValue(HKEY_LOCAL_MACHINE, key, 'RBld', rbld) then begin
                Log('VC 2013 Redist Major is: ' + IntToStr(major) + ' Minor is: ' + IntToStr(minor) + ' Bld is: ' + IntToStr(bld) + ' Rbld is: ' + IntToStr(rbld));
                // Version info was found. Return true if later or equal to our 14.0.24212.00 redistributable
                // Note brackets required because of weird operator precendence
                Result := (major >= 12) and (minor >= 0) and (bld >= 21005) and (rbld >= 0)
            end;
          end;
        end;
      end;
     end;
      
     function VC2015installed: Boolean;
     // Function for Inno Setup Compiler
     // Returns True if same or later Microsoft Visual C++ 2015 Redistributable is installed, otherwise False.
     var
      major: Cardinal;
      minor: Cardinal;
      bld: Cardinal;
      rbld: Cardinal;
      key: String;
      begin
      Result := False;
      key := 'SOFTWARE\Wow6432Node\Microsoft\VisualStudio\14.0\VC\Runtimes\x64';
      if RegQueryDWordValue(HKEY_LOCAL_MACHINE, key, 'Major', major) then begin
        if RegQueryDWordValue(HKEY_LOCAL_MACHINE, key, 'Minor', minor) then begin
          if RegQueryDWordValue(HKEY_LOCAL_MACHINE, key, 'Bld', bld) then begin
            if RegQueryDWordValue(HKEY_LOCAL_MACHINE, key, 'RBld', rbld) then begin
                Log('VC 2015 Redist Major is: ' + IntToStr(major) + ' Minor is: ' + IntToStr(minor) + ' Bld is: ' + IntToStr(bld) + ' Rbld is: ' + IntToStr(rbld));
                // Version info was found. Return true if later or equal to our 14.0.24212.00 redistributable
                // Note brackets required because of weird operator precendence
                Result := (major >= 14) and (minor >= 0) and (bld >= 23026) and (rbld >= 0)
            end;
          end;
        end;
      end;
     end;
  6. Abschließend wird das Skript abgespeichert und kann ausgeführt werden. Die Erstellung der Datei „QGIS-Setup_64bit.exe“ nimmt ca. 15 Minuten in Anspruch.

weitere Hinweise:

  • Um die Liste der zuletzt geöffneten Projekte zu löschen, muss man in der Datei „QGIS.ini“ im Abschnitt „[UI]“ alle Einträge mit „recentProjects\“ löschen und die Änderungen abspeichern.
  • nircmd shortcut - Das Kommando wird für die Startmenü-Einträge benötigt (QGIS-LTR, OSGeo4W Shell).
  • Zum Erstellen einer exe-Datei mit „Inno Setup“ gibt es hier weitere Hinweise.
  • Die Integration der Visual C++-Bibliotheken in die Setup-Datei ist ein wenig tricky. Hinweise zur Überprüfung und Installation der Microsoft Visual C++ Redistributable Packages gibt es hier und insbesondere hier.
    Probleme mit Visual C++ 2008 → siehe hier und hier
    Programmierbeispiele → hier.
    Auf 64bit-Systemen muss man eine Abfrage erstellen, welche Betriebssystemversion auf dem Client verwendet wird. Erst wenn „HKLM64“ verwendet wird, nimmt Inno Setup auch den richtigen Pfad in der Registry. Andernfalls wird im Pfad für 32bit-Systeme geschaut (siehe hier.

Arbeitsschritt 10

Die Installation auf den Clients kann zum einen händisch durch Ausführen der „QGIS-Setup_<Variante>.exe“ mit Admin-Rechten erfolgen. Nach dem Starten der exe-Datei erscheint eine Abfrage, ob man mit der Installation beginnen will:
QGIS-Setup Abfrage
Bestätigt man die Abfrage mit „Installieren“ läuft die Einrichtung von QGIS ohne weitere Nachfrage durch. Zum Schluss wird gegebenenfalls nach einem Neustart gefragt:
Neustart-Abfrage
Dieser wird durch die Installation von Schrift-Fonts erforderlich.
In der Regel wird die Installation jedoch über eine Softwareverteilung erfolgen. Hierbei ist darauf zu achten, dass man dem Setup zwei Parameter mitgibt, um die o.g. Benutzerdialoge zu verhindern:

QGIS-Setup_<Variante>.exe /silent /norestart

Damit verläuft die Installation ohne Nachfragen an den Benutzer. Allerdings stehen die Schrift-Fonts erst nach einem Neustart zur Verfügung. Ein vollständige Übersicht über die zur Verfügung stehenden Parameter beim Start der Setupdatei bekommt man nach Eingabe von „QGIS-Setup_<Variante>.exe /?“. Durch Angabe von /LOG wird eine Log-Datei in das Temp-Verzeichnis des Benutzer geschrieben („C:\users\<Benutzername>\AppData\Local\Temp“). Der eindeutige Dateiname besteht aus dem Datum und die Uhrzeit. Ältere Log-Dateien werden nicht überschrieben. Durch Angabe von /LOG=„<Verzeichnis>\<Dateiname>“ kann man das Verzeichnis und den Namen der LOG-Datei vorgeben. Bei Weglassen des Verzeichnisnamens schreibt Inno Setup die Datei in das Verzeichnis, in dem die Setupdatei gestartet wurde. Vorhandene Dateien werden überschrieben!

Hinweis: Die hier dokumentierte Verfahrensbeschreibung beschränkt sich auf den Arbeitsbereich des GIS-Administrators und der Vorbereitung der QGIS-Installation. Welche darüber hinausgehenden Anforderungen von Seiten der Software für die Softwareverteilung bestehen, hängt stark von dem eingesetzten Programm ab und muss im Einzelnen mit den EDV-Administratoren abgesprochen werden.

1. Prepare-Phase (Netzwerk-Installationvorlage erstellen, QGIS 2.x)

Wichtige Hinweise: Grundsätzlich sollten die Installationen für die Vorbereitungsphase auf den Betriebssystemen durchgeführt werden, auf denen QGIS später auch laufen muss (Windows 7 32bit, Windows 7 64bit). Dafür bieten sich ggf. virtuelle Maschinen an. Umfangreiche Tests haben ergeben, dass sich eine Installation z.B. auf einem Windows Server Betriebssystem nicht eignet, da es immer wieder Probleme mit der deutschen Benutzeroberfläche gegeben hat. Die Schaltflächen der Dialogfenster werden nicht durchgängig in Deutsch beschriftet. Führt man die Vorbereitungsphase jedoch auf den jeweiligen Zielsystemen (Windows 7 32bit, Windows 7 64bit) durch, gibt es hinterher auf den Clients keine derartigen Probleme.
Hält man sich an der Vorgabe der Anleitung von Frederikssund und installiert die QGIS-Vorlage nicht im Programme-Verzeichnis, gibt es später ebenfalls Probleme bei Verwendung der deutschen Oberfläche. Auch in diesem Fall werden in einigen Dialogen die Dialog-Buttons („Ok“, „Abbrechen“ etc.) nicht auf Deutsch beschriftet.
Außerdem sollte man das Userverzeichnis „…\.qgis_template“ nach „…\qgis_template“ umbenennen. Mit führendem „.“ (Punkt) im Dateinamen kommt Windows nicht so gut zurecht :-).

  1. Die unter dieser Adresse angebotenen Dateien herunterladen und in einem Ordner der Wahl abspeichern
  2. Auf einem beliebigen Windows-PC die aktuelle eigenständige QGIS LTR-Version (nur QGIS 2.18.x) über die Setup-Datei in herkömmlicher Weise installieren. 3) Als Installationsverzeichnis wird „C:\Program Files\qgis-ltr“ vorgeschlagen.
    Erläuterung: Bei einer Standard-Installation gibt die Setup-Routine von QGIS Verzeichnisnamen der Art „…\QGIS Las“, „…\QGIS 2.14“ vor. Die Bezeichnungen beziehen sich auf ein konkretes Major-Release und führen bei künftigen Updates zu Verwirrungen, so dass eine „Verallgemeinerung“ des Verzeichnisnamens für den QGIS-Installationsordner sinnvoll erscheint.
  3. Kopie der Datei „C:\Program Files\qgis-ltr\bin\qgis-ltr.bat“ erstellen, diese nach „qgis-start.bat“ umbenennen und die letzte Zeile wie folgt anpassen:
    REM Original command
    REM start "QGIS" /B "%OSGEO4W_ROOT%"\bin\qgis-ltr-bin.exe %*
    
    REM changed Command for network-installation
    call "%OSGEO4W_ROOT%\bin\qgis-prepare.bat" 
    start "QGIS" /B "%OSGEO4W_ROOT%"\bin\qgis-ltr-bin.exe --configpath "%QGIS_UDIR%" %*
  4. „qgis-ltr.bat“ nach „qgis-ltr.bat.org“ umbenennen (kann später gelöscht werden)
  5. Die unter [1] heruntergeladenen Dateien „qgis-prepare.bat“, „qgis.reg.tmpl“ und „minised.exe“ nach „C:\Program Files\qgis-ltr\bin“ kopieren
  6. In der Datei „qgis.reg.tmpl“ das Shell-Kommando in der letzten Zeile nach von „qgis.bat“ nach „qgis-start.bat“ ändern.
  7. Datei „qgis-prepare.bat“ wie folgt anpassen (Pfade, Bezeichnungen etc. gegebenenfalls an die eigenen Bedürfnisse anpassen):
    • QGIS_UDIR=%USERPROFILE%\AppData\Roaming\qgis-ltr
    • QGIS_TEXT=QGIS LTR
    • „.qgis_template“ nach „qgis_template“ ändern (s.o.)
    • Für den Eintrag in das „Start → Programme“-Menü den Eintrag nircmd shortcut … „~$folder.programs$\QGIS“ … ändern und - falls gewünscht - für die OSGeo4W Shell nachtragen:
      nircmd shortcut """%OSGEO4W_ROOT%""\OSGeo4W.bat" "%ProgramData%\Microsoft\Windows\Start Menu\Programs\QGIS" "OSGeo4W Shell" "" """%OSGEO4W_ROOT%""\OSGeo4W.ico" "" "" """\" ""
  8. Pfad „C:\Program Files\qgis-ltr\apps\msys“ erstellen (s. Punkt 9f)
  9. Datei „qgis_start.bat“ ausschließlich mit Admin-Rechten ausführen! Im QGIS Programm-Ordner wird ein neues Verzeichnis namens „qgis_template“ angelegt. Hier werden während der Prepare-Phase nun sämtliche Konfigurationen abgespeichert, die als Vorlage für das persönliche Verzeichnis des späteren Anwenders dient.
  10. Einstellungen vornehmen, ggf. mehrfach wiederholen
    1. „Einstellungen → Optionen“ anpassen:

      Hinweis: Startet man QGIS in der Prepare-Phase mit Admin-Rechten, werden die Netzwerk-Laufwerke nicht angezeigt. Bei Eingabe von Verzeichnispfaden muss man UNC-Pfade eingeben!

      • „Allgemein“, beispielsweise → Vorlagenverzeichnis einstellen, Option „QGIS-Version beim Start überprüfen“ deaktivieren
      • „System“, beispielsweise → SVG-Pfade einstellen
      • „Datenquellen“, beispielsweise → Unter „Datenquellenbehandlung“ die Option „Shapedatei-Kodierungsangabe ignorieren“ deaktivieren (Häkchen entfernen). Dadurch wird beim Laden einer Shape-Datei die cpg-Datei berücksichtigt und die Umlaute korrekt dargestellt.
      • „Darstellung“, beispielsweise → Option „Layer mit vielen CPU-Kernen parallel zeichnen“ aktivieren
      • „Kartenwerkzeuge“, beispielsweise → „Vordefinierte Maßstäbe“ → vorhandene Liste löschen und über „Aus Datei importieren“ neue/erweiterte Liste einlesen
      • „Zusammenstellung“, beispielsweise → Vorgabeschriftart einstellen, Pfad für Druckvorlagen vorgeben
      • „KBS“, beispielsweise → Neue Projekte immer mit EPSG:25832 beginnen, neue Layer immer im EPSG:25832
      • „Netzwerk“, beispielsweise → „Proxy für Webzugriff benutzen → DefaultProxy“ einstellen
    2. ggf. Aktualisierung der Erweiterungen, falls noch nicht passiert, beispielsweise → Einbinden eines lokalen Repositories für eigene Plugin-Entwicklungen
    3. Installation gewünschter Erweiterungen, beispielsweise → „Instant Print“, „QuickMapService“ und „Digitizing Tools“
    4. Aktivierung der Erweiterungen (unter „installiert“), den Rest deaktivieren, beispielsweise:
      • DB Manager
      • GDAL-Georeferenzierung
      • GdalTools
      • Geometrieprüfung
      • MetaSearch Catalogue Client
      • Processing
      • Topologie-Prüfung
    5. Bedienfelder und Werkzeugkästen anpassen

      Hinweis: Die „Web-Werkzeugleiste“ enthält nach Deaktivierung einiger Erweiterungen keine Schaltflächen mehr. Sie ist dann nur noch als vertikale Punktleiste sichtbar und kann daher ausgeschaltet werden.

    6. Einstellungen der Verarbeitungsoptionen überprüfen
      • Achtung: Überprüfen, ob Fehlermeldung zu fehlenden Verzeichnissen erscheinen: So muss bei QGIS 2.18.x ggf. der Pfad „C:\Program Files\qgis-ltr\apps\msys“ händisch erstellt werden, damit keine Fehlermeldung erfolgt. Er wird (noch) für das Grass 6.4.3 Plugin benötigt.
        Erläuterung: Bei der „Prepare“-Phase kann es nach der Standard-Installation zu Problemen mit dem Processing kommen. Eine Anpassung der Optionen scheitert ggf. an Fehlermeldungen: „Wrong value for parameter '…'. Specified path does not exist …“. Hier können unterschiedliche Verzeichnisse fehlen oder falsch bezeichnet sein (z.B. „msys“, „grass-7.2.2“). Bei Auftreten dieses Fehlers reicht es aus, den fehlenden Pfad im Verzeichnis „%OSGEO4W_ROOT%\apps“ einzurichten. Das Verzeichnis kann ruhig leer sein. Anschließend startet man QGIS erneut, stellt die Optionen wie gewünscht ein und bestätigt die Änderungen mit OK. Dieses Mal wird keine Fehlermeldung angezeigt (vgl. auch hier).
      • Achtung: In den „processing options“ werden die Pfade für die Provider zum Teil unterschiedlich gesetzt: mal erscheint der volle Verzeichnisname ein anderes Mal wird die DOS-Namenskonvention verwendet (z.B. „C:\PROGRA~1\qgis-ltr\apps\grass\grass-7.2.2“ vs. „C:\Program Files\qgis-ltr\apps\grass\grass-7.2.2“). Das führt zu unvollständigen Ersetzungen während der ersten RUN-Phase. Vor Veröffentlichung daher unbedingt die Pfade in der Datei „…\qgis_template\QGIS\QGIS.ini“ überprüfen!
      • Im Reiter „Allgemein“ die Option „Behalte Dialog nach Abschluss des Algorithmus offen“ aktivieren, die Option „Tooltip anzeigen, wenn es abgeschaltete Anbieter gibt“ deaktivieren
    7. ggf. muss in den Projekteigenschaften unter „Allgemein → Koordinatenanzeige → Koordinatenanzeige in“ die Option „Karteneinheiten (Meter)“ eingestellt werden. In älteren Projekten kann dort noch „Dezimal Grad“ stehen.
    8. ggf. PostGIS-Layer für die vorhandene Datenbank(en) anlegen:
      |PostGIS-Verbindung einrichten
  11. Für die QGIS-Installation auf den Clients müssen einige weitere Vorbereitungen erfolgen. Die Batch-Datei mit Anweisungen zu den Dateiverknüpfungen, Desktop-Symbolen etc. pp. muss vorm bzw. beim ersten Start von QGIS mit Admin-Rechten ausgeführt werden, damit die Änderungen auch in der Registry übernommen werden. Für die Variante 2 (Setup per Softwareverteilung) empfiehlt sich daher, direkt nach der QGIS-Installation eine entsprechende Batch-Datei auszuführen, da die Installation ohnehin mit Admin-Rechten durchgeführt wird. Als Grundlage für diese Batchdatei kann man die „qgis-prepare.bat“ verwenden und beispielsweise folgende Änderungen vornehmen:
    • Datei nach „qgis-postinstall.bat“ kopieren
    • ggf. Registry-Dateien für zusätzliche Schriftarten nach „C:\Program Files\qgis-ltr\bin“ kopieren
    • Übernahme der ersten Zeilen aus der qgis-start.bat zum Setzen der Pfade
    • nicht benötigte Zeilen entfernen
    • Für das Desktop-Icon sowie die Einträge im Programme-Verzeichnis sollten die „Öffentlichen Ordner“ verwendet werden, damit unabhängig vom jeweiligen Benutzer, auf QGIS zugegriffen werden kann. Per Default greift die „qgis-prepare.bat“ von Frederikssund nur auf Verzeichnisse des angemeldeten Benutzers zu. Darüber hinaus ist im „Programme“-Verzeichnis der Eintrag für die OSGeo4W Shell nachzutragen (GDAL-Befehle aus der Komandozeile ausführen). Eine gute Übersicht über „offizielle“ Abkürzungen für die benötigten Verzeichnisse gibt es auf dieser Microsoft-Seite Common folder variables. Daraus ergeben sich folgende Änderungen in der „qgis-postinstall.bat“:
      REM Desktop-Icon erstellen 
      REM nircmd shortcut """%OSGEO4W_ROOT%""\bin\qgis-start.bat" "~$folder.desktop$" "%QGIS_TEXT%" "" """%OSGEO4W_ROOT%""\icons\QGIS.ico" "0" "min" """%OSGEO4W_ROOT%""\bin" ""
      nircmd shortcut """%OSGEO4W_ROOT%""\bin\qgis-start.bat" "%PUBLIC%\Desktop" "%QGIS_TEXT%" "" """%OSGEO4W_ROOT%""\icons\QGIS.ico" "0" "min" """%OSGEO4W_ROOT%""\bin" ""
      
      REM Programm-Einträge erstellen 
      REM nircmd shortcut """%OSGEO4W_ROOT%""\bin\qgis-start.bat" "~$folder.programs$\QGIS" "%QGIS_TEXT%" "" """%OSGEO4W_ROOT%""\icons\QGIS.ico" "0" "min" """%OSGEO4W_ROOT%""\bin" ""
      REM nircmd shortcut """%OSGEO4W_ROOT%""\OSGeo4W.bat" "~$folder.programs$\QGIS" "OSGeo4W Shell" "" """%OSGEO4W_ROOT%""\OSGeo4W.ico" "" "" """\" ""
      nircmd shortcut """%OSGEO4W_ROOT%""\bin\qgis-start.bat" "%ProgramData%\Microsoft\Windows\Start Menu\Programs\QGIS" "%QGIS_TEXT%" "" """%OSGEO4W_ROOT%""\icons\QGIS.ico" "0" "min" """%OSGEO4W_ROOT%""\bin" ""
      nircmd shortcut """%OSGEO4W_ROOT%""\OSGeo4W.bat" "%ProgramData%\Microsoft\Windows\Start Menu\Programs\QGIS" "OSGeo4W Shell" "" """%OSGEO4W_ROOT%""\OSGeo4W.ico" "" "" """\" ""

      Die Änderungen müssen für alle Betriebssystem-Varianten vorgenommen werden!

    • ggf. Symbol-Fonts kopieren und registrieren
    • Microsoft Visual C++ Redistributable: Bei der „normalen“ Installation von QGIS 2.18.x werden die entsprechenden Pakete für VC++ 2008 SP1, VC++ 2013 und VC++ 2015 hinzugefügt. Die orignalen Pakete werden nach der Installation normalerweise gelöscht. Die Original-Quellen liegen hier (X86) bzw. hier (X86_64). Sie müssen wieder in den Ordner „C:\Program Files\qgis-ltr\bin“ kopiert werden!

      Hinweis: Dort liegen spezielle Versionen:
      64bit: Microsoft Visual C++ 2008 Redistributable - x64 9.0.30729.17 (ServicePack 1 von VC++ 2008), Microsoft Visual C++ 2013 x64 Additional Runtime - 12.0.21005 (VC++ 2013) sowie Microsoft Visual C++ 2015 x64 Additional Runtime - 14.0.23026 (VC++ 2015).
      32bit: Microsoft Visual C++ 2008 Redistributable - x86 9.0.30729.17 (ServicePack 1 von VC++ 2008), Microsoft Visual C++ 2013 x86 Additional Runtime - 12.0.21005 (VC++ 2013) sowie Microsoft Visual C++ 2015 x86 Additional Runtime - 14.0.23918 (VC++ 2015).Bitte nur diese Versionen für das QGIS-Installationpaket verwenden!

  12. Sind alle Einstellungen vorgenommen, wird der komplette Ordner „C:\Program Files\qgis-ltr“ getrennt nach Versionen (Betriebssystemvarianten) auf entsprechende Netzlaufwerke kopiert.
  13. In der Datei „qgis-start.bat“ muss folgende Zeile um die Angabe „RUN“ ergänzt werden:
    call "%OSGEO4W_ROOT%\bin\qgis-prepare.bat"
    call "%OSGEO4W_ROOT%\bin\qgis-prepare.bat" RUN

Die erste Phase der Vorbereitung ist damit abgeschlossen.

2a. Variante 1: Installationsordner kopieren

In komplexen Umgebungen wird man QGIS über ein entsprechendes Softwareverteilungs-Tool „ausrollen“ wollen (z.B. Microsoft SCCM, Matrix 42 Empirum etc.). Hierzu muss man die nachfolgenden Arbeitsschritte in der entsprechenden Management Konsole einarbeiten und ggf. anpassen (siehe unten [2b.]). Für kleinere Umgebungen reicht es aus, dass der Administrator QGIS „von Hand“ ausrollt:

  1. Überprüfen, ob die benötigten Microsoft-Runtime auf dem Client-PC installiert sind: je nach QGIS-Version werden Microsoft Visual C++ 2008 Redistributable, Microsoft Visual C++ 2010 Redistributable, Microsoft Visual C++ 2012 Redistributable, Microsoft Visual C++ 2013 Redistributable oder Microsoft Visual C++ 2015 Redistributable benötigt (s.o.). Die Setup-Dateien für die erforderlichen Runtimes befinden sich wie oben beschrieben, im QGIS bin-Verzeichnis und können von dort aus ausgeführt werden.
    Hinweis: Sollten die Runtimes nicht vorhanden sein, bricht QGIS den Start mit einer entsprechenden Fehlermeldung ab.
  2. Komplettes Installationsverzeichnis vom Netzlaufwerk nach „C:\Program Files\qgis-ltr“ kopieren
  3. Beim ersten Start von QGIS auf dem Client die Datei „qgis-start.bat“ mit Admin-Rechten starten, damit das Desktop-Icon, die Startmenü-Einträge die Dateiverknüpfungen etc. pp. und der Benutzerordner ordnungsgemäß eingerichtet werden.
  4. Anschließend QGIS schließen und mit normalen User-Rechten über das Desktop-Icon starten.
  5. Einstellungen / Funktionsfähigkeit prüfen
2b. QGIS-Setup.exe erstellen

Für die Variante 2 (QGIS Setup für Softwareverteilung) geht es nun darum, ein Installationspaket mit allen erforderlichen Komponenten zu schnüren und als „QGIS-Setup.exe“ abzulegen. Die nachfolgenden Ausführungen verstehen sich als beispielhaftes Vorgehen, dass beim Autor zum Erfolg geführt hat.
Für die Erstellung eines Installationspakets hat sich das Programm „Inno Setup“ bewährt (Homepage). Inno Setup bringt einen eigenen Script-Editor mit (Inno Script Studio), mit dem man das Skript zur Erstellung der Setup-Datei zusammenstellen und editieren kann. Das Skript unterstützt Coding in Pascal. Eine gute Übersicht über die Funktionalitäten erhält man in der Hilfe. Das Programm wird auf einem beliebigen Rechner installiert. Für die Erstellung der Skripte ist folgendes Vorgehen erforderlich (Ersteinrichtung 64bit-Variante):

  1. Inno Script Studio bringt einen Assistenten mit, der bei der Neuanlage eines Skripts behilflich ist. Hier werden zunächst wesentliche Angaben vorgenommen:
    • Nach dem Start fragt das Programm, ob man ein neues Skript mit dem Assistenten erstellen möchte:
      Neues Skript erstellen
      Skript Assistent
    • Allgemeine Informationen zur „QGIS LTR“-Installation:
      QGIS-Informationen
    • Lokales Ziel-Verzeichnis auf dem Client-PC eintragen. Option zur „Änderung des Ziel-Verzeichnisses durch den Anwender“ deaktivieren:
      Ziel-Verzeichnis
    • Option „Keine ausführbare Datei“ aktivieren, QGIS Quell-Ordner (= Installationsordner aus der Prepare-Phase) hinzufügen:
      QGIS-Quell-Ordner
    • Verzeichnisnamen für das Startmenü eintragen. Alle anderen Optionen deaktivieren:
      Startmenü-Eintrag
    • Angaben zur Lizenz etc. leer lassen:
      Lizenzen
    • Setup-Sprache auswählen:
      Setup-Sprache
    • Angaben zu den Compiler-Einstellungen (Ausgabeverzeichnis, Setup-Icon etc.):
      Compiler-Einstellungen
    • Preprozessors benutzen:
      Preprozessor benutzen
    • Skript fertigstellen:
      Skript fertigstellen
  2. Danach öffnet sich der Skript-Editor. Hier überprüft man zunächst die Angaben und nimmt ggf. Korrekturen vor.

    Achtung: Im Script muss der Parameter „DefaultDirName“ im Abschnitt „Setup“ auf „C:\Program Files\qgis_ltr(32bit + 64bit) gesetzt sein!

  3. Im Abschnitt [Setup] sind folgende Zeilen zu ergänzen:
    AppComments=mailto:<Email-Adresse>
    AppContact=<Organisation - Abteilung>
    AppSupportPhone=<Telefonnummer>
    AlwaysRestart=yes
    PrivilegesRequired=admin

    Wenn im weiteren Verlauf Schriftarten hinzugefügt und registriert werden, ist ein Neustart erforderlich (AlwaysRestart=yes). Der Anwender wird jedoch gefragt, ob er diesen Neustart unmittelbar nach der Installation vornehmen oder auf einen späteren Zeitpunkt verschieben möchte!

  4. Neuen Abschnitt namens [Run] anlegen. Hier müssen Einträge hinzugefügt werden, die nach der Kopie des QGIS-Verzeichnisses (Abschnitt [Files]) ausgeführt werden sollen (Beispiel 64bit-Variante):
    Filename: "{app}\bin\qgis-postinstall.bat"; Description: "Benutzerverzeichnis erstellen, Dateiverknüpfungen setzen"; Flags: shellexec waituntilterminated
    Filename: "{app}\bin\vcredist-2008-sp1-x64.exe"; Parameters: "/qb"; Check: IsWin64 and not VC2008installed
    Filename: "{app}\bin\vcredist-2013-x64.exe"; Parameters: "/install /passive"; Check: IsWin64 and not VC2013installed

    Die qgis-postinstall.bat stellt in der Registry die Dateiverknüpfungen her, kopiert ggf. die gewünschten Schriftarten, erstellt die Startmenü-Eintrage, platziert das Desktop-Icon und kopiert die Konfigurationsdatei in das dafür vorgesehene Benutzerverzeichnis (s. o.). Danach werden die erforderlichen Visual C++-Bibliotheken installiert, so sie nicht bereits installiert sind. Hier unterscheiden sich die Aufrufe je nach Betriebssystemvariante.
    Hinweis: Die „Parameters“-Angaben dienen zur „Silent installation“ ohne Nachfragen an den Anwender.

  5. Schließlich muss der Abschnitt [Code] angelegt werden. Für die 64bit-Variante muss hier zunächst überprüft werden, welche Betriebssystem-Version vorliegt (32bit oder 64bit) und ob die VC++-Bibliotheken bereits installiert sind (Beispiel für Windows 7 Professional, QGIS 2.18.16, 64bit-Version):
    [Code]
     // Überprüfen, welche Betriebssystem-Version installiert ist!
     // Unterlässt man dies, wird auf 64bit-Systemen im falschen Registry-Zweig gesucht
     function GetHKLM: Integer;
     begin
      if IsWin64 then
        Result := HKLM64
      else
        Result := HKLM32;
     end; 
    
     function VC2008installed: Boolean;
     // Function for Inno Setup Compiler
     // Returns True if same or later Microsoft Visual C++ 2008 SP1 Redistributable is installed, otherwise False.
     var
      //dn: String;
      version: Cardinal;
      major: Cardinal;
      minor: Cardinal;
      key: String;
      begin
      Result := False;
      key := 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{8220EEFE-38CD-377E-8595-13398D740ACE}';
      //if RegQueryStringValue(HKEY_LOCAL_MACHINE, key, 'DisplayName', dn) then begin
      if RegQueryDWordValue(GetHKLM, key, 'Version', version) then begin
        if RegQueryDWordValue(GetHKLM, key, 'VersionMajor', major) then begin
          if RegQueryDWordValue(GetHKLM, key, 'VersionMinor', minor) then begin
                //Log('VC 2008 Redist DisplayName is: ' + dn );
                Log('VC 2008 Redist Version is: ' + IntToStr(version) + ' Minor is: ' + IntToStr(major) + ' Bld is: ' + IntToStr(minor));
                // Version info was found. Return true if later or equal to our 14.0.24212.00 redistributable
                // Note brackets required because of weird operator precendence
                //Result := (dn = 'Microsoft Visual C++ 2008 Redistributable - x64 9.0.30729.17')
                Result := (version >= 151025673) and (major >= 9) and (minor >= 0)
          end;
        end;
      end;
     end;
     
     function VC2013installed: Boolean;
     // Function for Inno Setup Compiler
     // Returns True if same or later Microsoft Visual C++ 2013 Redistributable is installed, otherwise False.
     var
      major: Cardinal;
      minor: Cardinal;
      bld: Cardinal;
      rbld: Cardinal;
      key: String;
      begin
      Result := False;
      key := 'SOFTWARE\Wow6432Node\Microsoft\VisualStudio\12.0\VC\Runtimes\x64';
      if RegQueryDWordValue(HKEY_LOCAL_MACHINE, key, 'Major', major) then begin
        if RegQueryDWordValue(HKEY_LOCAL_MACHINE, key, 'Minor', minor) then begin
          if RegQueryDWordValue(HKEY_LOCAL_MACHINE, key, 'Bld', bld) then begin
            if RegQueryDWordValue(HKEY_LOCAL_MACHINE, key, 'RBld', rbld) then begin
                Log('VC 2013 Redist Major is: ' + IntToStr(major) + ' Minor is: ' + IntToStr(minor) + ' Bld is: ' + IntToStr(bld) + ' Rbld is: ' + IntToStr(rbld));
                // Version info was found. Return true if later or equal to our 14.0.24212.00 redistributable
                // Note brackets required because of weird operator precendence
                Result := (major >= 12) and (minor >= 0) and (bld >= 21005) and (rbld >= 0)
            end;
          end;
        end;
      end;
     end;
      
     function VC2015installed: Boolean;
     // Function for Inno Setup Compiler
     // Returns True if same or later Microsoft Visual C++ 2015 Redistributable is installed, otherwise False.
     var
      major: Cardinal;
      minor: Cardinal;
      bld: Cardinal;
      rbld: Cardinal;
      key: String;
      begin
      Result := False;
      key := 'SOFTWARE\Wow6432Node\Microsoft\VisualStudio\14.0\VC\Runtimes\x64';
      if RegQueryDWordValue(HKEY_LOCAL_MACHINE, key, 'Major', major) then begin
        if RegQueryDWordValue(HKEY_LOCAL_MACHINE, key, 'Minor', minor) then begin
          if RegQueryDWordValue(HKEY_LOCAL_MACHINE, key, 'Bld', bld) then begin
            if RegQueryDWordValue(HKEY_LOCAL_MACHINE, key, 'RBld', rbld) then begin
                Log('VC 2015 Redist Major is: ' + IntToStr(major) + ' Minor is: ' + IntToStr(minor) + ' Bld is: ' + IntToStr(bld) + ' Rbld is: ' + IntToStr(rbld));
                // Version info was found. Return true if later or equal to our 14.0.24212.00 redistributable
                // Note brackets required because of weird operator precendence
                Result := (major >= 14) and (minor >= 0) and (bld >= 23026) and (rbld >= 0)
            end;
          end;
        end;
      end;
     end;
  6. Abschließend wird das Skript abgespeichert und kann ausgeführt werden. Die Erstellung der Dateien „QGIS-Setup_32bit.exe“ bzw. „QGIS-Setup_64bit.exe“ nimmt ca. 15 Minuten in Anspruch.

weitere Hinweise:

  • Um die Liste der zuletzt geöffneten Projekte zu löschen, muss man in der Datei „QGIS2.ini“ im Abschnitt „[UI]“ alle Einträge mit „recentProjects\“ löschen und die Änderungen abspeichern.
  • In Ergänzung zu in der o.g. Anleitung erwähnten „qgis-ltr.bat“ kann man ggf. auch die Datei „qgis_grass7.bat“ anpassen. Beim Starten von QGIS gibt es nach Aktivierung der „Meldungen“ im Reiter „Erweiterungen“ Fehlermeldungen beim Laden der entsprechenden DLL's von Grass7 / Globe. Im Regelfall können diese ignoriert werden. Die entsprechenden Funktionen stehen im Menü „Verarbeitung“ in der „Werkzeugkiste“ trotzdem zur Verfügung. Startet man die angepasste Batch-Datei für Grass 7, erscheinen keine Fehlermeldungen mehr.
  • nircmd shortcut - Das Kommando wird für die Startmenü-Einträge benötigt (QGIS-LTR, OSGeo4W Shell).
  • Zum Erstellen einer exe-Datei mit „Inno Setup“ gibt es hier weitere Hinweise.
  • Die Integration der Visual C++-Bibliotheken in die Setup-Datei ist ein wenig tricky. Hinweise zur Überprüfung und Installation der Microsoft Visual C++ Redistributable Packages gibt es hier und insbesondere hier.
    Probleme mit Visual C++ 2008 → siehe hier und hier
    Programmierbeispiele → hier.
    Auf 64bit-Systemen muss man eine Abfrage erstellen, welche Betriebssystemversion auf dem Client verwendet wird. Erst wenn „HKLM64“ verwendet wird, nimmt Inno Setup auch den richtigen Pfad in der Registry. Andernfalls wird im Pfad für 32bit-Systeme geschaut (siehe hier.
3. Installation auf den Clients

Die Installation auf den Clients kann zum einen händisch durch Ausführen der „QGIS-Setup_<Variante>.exe“ mit Admin-Rechten erfolgen. Nach dem Starten der exe-Datei erscheint eine Abfrage, ob man mit der Installation beginnen will:
QGIS-Setup Abfrage
Bestätigt man die Abfrage mit „Installieren“ läuft die Einrichtung von QGIS ohne weitere Nachfrage durch. Zum Schluss wird gegebenenfalls nach einem Neustart gefragt:
Neustart-Abfrage
Dieser wird durch die Installation von Schrift-Fonts erforderlich.
In der Regel wird die Installation jedoch über eine Softwareverteilung erfolgen. Hierbei ist darauf zu achten, dass man dem Setup zwei Parameter mitgibt, um die o.g. Benutzerdialoge zu verhindern:

QGIS-Setup_<Variante>.exe /silent /norestart

Damit verläuft die Installation ohne Nachfragen an den Benutzer. Allerdings stehen die Schrift-Fonts erst nach einem Neustart zur Verfügung. Ein vollständige Übersicht über die zur Verfügung stehenden Parameter beim Start der Setupdatei bekommt man nach Eingabe von „QGIS-Setup_<Variante>.exe /?“. Durch Angabe von /LOG wird eine Log-Datei in das Temp-Verzeichnis des Benutzer geschrieben („C:\users\<Benutzername>\AppData\Local\Temp“). Der eindeutige Dateiname besteht aus dem Datum und die Uhrzeit. Ältere Log-Dateien werden nicht überschrieben. Durch Angabe von /LOG=„<Verzeichnis>\<Dateiname>“ kann man das Verzeichnis und den Namen der LOG-Datei vorgeben. Bei Weglassen des Verzeichnisnamens schreibt Inno Setup die Datei in das Verzeichnis, in dem die Setupdatei gestartet wurde. Vorhandene Dateien werden überschrieben!

Hinweis: Die hier dokumentierte Verfahrensbeschreibung beschränkt sich auf den Arbeitsbereich des GIS-Administrators und der Vorbereitung der QGIS-Installation. Welche darüber hinausgehenden Anforderungen von Seiten der Software für die Softwareverteilung bestehen, hängt stark von dem eingesetzten Programm ab und muss im Einzelnen mit den EDV-Administratoren abgesprochen werden.

1)
Mit QGIS3 entfällt die Nutzung der Windows-Registry für weitere Einstellungen,wie das unter QGIS 2.x noch der Fall war.
2)
BETA2007.sql, minised.exe, qgis.ltr.reg.tmpl, qgis_fonts.reg, qgis-ltr-postinstall.bat, qgis-ltr-prepare.bat, qgis-ltr-start.bat und qgis-ltr-start-prepare.bat
3)
Es wird davon ausgegangen, dass nur noch 64bit-Versionen zum Einsatz kommen. Andernfalls muss man zwischen 32bit- und 64bit-Versionen und z.B. bei Verzeichnisnamen ein „.32bit“ bzw. „.64bit“ anhängen.