{"id":55001326,"date":"2021-10-01T00:00:00","date_gmt":"2021-09-29T22:11:38","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1326"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Setup_fuer_Access_Umsetzung_mit_InnoSetup","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Setup_fuer_Access_Umsetzung_mit_InnoSetup\/","title":{"rendered":"Setup f&uuml;r Access: Umsetzung mit InnoSetup"},"content":{"rendered":"<p>Christoph J&uuml;ngling, https:\/\/www.juengling-edv.de<\/p>\n<p><b>Im ersten Teil haben wir uns mit den Grundlagen eines Setups besch&auml;ftigt, nun geht es &#8222;in medias res&#8220;. Dieser Teil beinhaltet die konkrete Umsetzung der Gedanken. Wir schauen uns das Setup-Script im Detail an und lernen, was die einzelnen Bestandteile bedeuten. Wir werden neben der Access-Datenbank auch Startmen&uuml;-Eintr&auml;ge und Desktop-Icons anlegen. Die Setup-Sprache wird variabel gemacht, es darf eine Lizenzvereinbarung geben und es wird f&uuml;r eine ordnungsgem&auml;&szlig;e Deinstallation gesorgt. <\/b><\/p>\n<h2>Organisatorisches<\/h2>\n<p>Vor der Umsetzung sollten wir uns kurz &uuml;berlegen, was wir erreichen wollen, denn &#8222;wer nicht wei&szlig;, wo er hin will, darf sich nicht wundern, wenn er ganz woanders ankommt&#8220;.<\/p>\n<p>Gehen wir zun&auml;chst von einem Minimalsetup aus. Was w&auml;re das Minimum, das ein Access-Entwickler von &#8222;seinem&#8220; Setup erwartet<\/p>\n<ul>\n<li>Einspielen der <b>.accdb<\/b>\/<b>.accde<\/b>-Datei<\/li>\n<li>Einrichten von Startmen&uuml;- und Desktop-Icons<\/li>\n<li>Vorbereitung der Deinstallation<\/li>\n<\/ul>\n<p>Als kleine Erweiterung behalten wir uns dann noch Folgendes vor:<\/p>\n<ul>\n<li>Zu Beginn Darstellung von Betahinweis oder der Lizenzbedingungen, Best&auml;tigung anfordern<\/li>\n<li>Zu Beginn Darstellung im Stile &#8222;Was ist neu in diesem Release&#8220;<\/li>\n<li>Abschlie&szlig;end eine Readme-Datei anzeigen<\/li>\n<\/ul>\n<p>Das ist zun&auml;chst sicher nicht viel, und wer den ersten Teil dieser kleinen Artikelserie gelesen hat, h&auml;tte sicher noch einiges mehr erwartet. Aber machen wir es uns zu Beginn nicht zu schwer, Erweiterungen sind ja jederzeit m&ouml;glich.<\/p>\n<p>Ich erlaube mir, an dieser Stelle noch ein anderes hilfreiches Werkzeug des Softwareentwicklers zu erw&auml;hnen. Wahrscheinlich werden Sie dies ohnehin nutzen, dann ist es nur eine Erinnerung, dass das auch f&uuml;r unser Setup-Script funktioniert.<\/p>\n<p>Es geht um Versionsverwaltung, auch Quellcodeverwaltung genannt. Unser Setup-Script ist im &#8222;Quellcode&#8220; schlie&szlig;lich auch nur ein wenig &#8222;plain text&#8220;, sodass dieses Script genauso mit Git (oder einer anderen Quellcodeverwaltung) verwaltet werden kann &#8211; und sollte.<\/p>\n<p>Die <b>.exe<\/b>-Datei w&uuml;rde ich dabei von der Verwaltung ausnehmen (Git: <b>*.exe<\/b> in die <b>.gitignore<\/b>-Datei). Einerseits wird sie recht gro&szlig; sein, andererseits ist sie redundant, denn alles, was zu ihrer Erstellung ben&ouml;tigt wird, ist ja ohnehin komplett versioniert.<\/p>\n<h2>Grundprinzip des Setup-Scripts<\/h2>\n<p>Das Setup-Script &auml;hnelt in weiten Bereichen streng genommen mehr einer <b>.ini<\/b>-Datei als einem Programm. Ich will es dennoch weiterhin &#8222;Script&#8220; nennen, da der Begriff durchaus als g&auml;ngig gelten kann. Die Festlegungen in diesem Script werden vom InnoSetup-Compiler interpretiert, der letztlich dann das eigentliche Setup (eine <b>.exe<\/b>-Datei) zusammenbaut. Ausgeliefert wird dann nur diese <b>.exe<\/b>-Datei.<\/p>\n<p>Wie bei einer <b>.ini<\/b>-Datei &uuml;blich haben wir Sektionen mit &Uuml;berschriften in eckigen Klammern wie zum Beispiel <b>[Setup] <\/b>gleich zu Beginn.<\/p>\n<p>Innerhalb dieser Sektionen stehen dann zahlreiche Key-Value-Eintr&auml;ge im Format <b>Key = Value<\/b>.<\/p>\n<p>Beginnt eine Zeile mit einem Semikolon, wird diese komplett als Kommentarzeile interpretiert, also nicht f&uuml;r die Setup-Erstellung ber&uuml;cksichtigt. Dadurch k&ouml;nnen wir bestimmte Eintr&auml;ge vorbereiten und bei Bedarf aktivieren oder deaktivieren. Nur ein erneuter Compilerlauf ist dann erforderlich.<\/p>\n<p>Wer ein neues Setup erstellen will, kann dies sowohl &uuml;ber InnoSetup selbst als auch &uuml;ber eine der im ersten Teil bereits angesprochenen GUIs tun. Dort ist in der Regel ein Assistent enthalten, mit dessen Hilfe das Grundger&uuml;st schnell eingerichtet werden kann.<\/p>\n<p>Da die Bedienung solcher Assistenten zumeist sehr intuitiv ist, will ich diese hier nicht n&auml;her besprechen, sondern lieber auf die Eintragungen im Script selbst eingehen. Ob Sie das Script mittels Assistenten oder von Hand erstellen oder einfach das am Ende dieses Artikels bereitgestellte fertige Script verwenden, bleibt dabei Ihnen &uuml;berlassen.<\/p>\n<p>Zu Beginn definieren wir in der Sektion <b>[Setup] <\/b>den Namen des zu installierenden Programms und einige weitere organisatorische Dinge:<\/p>\n<pre>[Setup]\r\nAppId=TestSetup \r\nAppName=My Awesome AccessApp\r\nAppVersion=1.0.0\r\nAppVerName=AccessApp v1.0.0\r\nAppPublisher=Vorname Name\r\nAppPublisherURL=https:\/\/www.meine-homepage.de\r\nAppSupportURL=https:\/\/www.meine-homepage.de\r\nAppUpdatesURL=https:\/\/www.meine-homepage.de<\/pre>\n<p>Dadurch werden Name und Version der zu installierenden Software genannt, ebenso Name und Website des Herausgebers und zwei URLs f&uuml;r Support und Updates. Die <b>AppId <\/b>hat dabei eine Sonderstellung, denn diese Information wird in der Registry als Bezeichnung f&uuml;r den <b>Uninstall<\/b>-Bereich eingetragen (siehe Bild 1). Hier finden Sie detaillierte Informationen &uuml;ber die Deinstallation.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_05\/pic_1326_001.png\" alt=\"Setup-Eintrag in der Registry\" width=\"699,559\" height=\"487,1773\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Setup-Eintrag in der Registry<\/span><\/b><\/p>\n<p>Anhand dieser Bezeichnung erkennt InnoSetup, ob es sich um eine Erstinstallation oder ein Update handelt. Dementsprechend sollte dieser Eintrag im Laufe des Projektes nicht mehr ver&auml;ndert werden!<\/p>\n<p>Anstelle eines sprechenden Namens kann hier nat&uuml;rlich auch eine GUID verwendet werden. Die Compiler-GUI und auch Inno Script Studio besitzen zu deren Erzeugung einen Men&uuml;befehl.<\/p>\n<p>Hierbei sehen wir bereits, dass einige Informationen mehrfach eingetragen werden. Zur besseren &Uuml;bersicht bietet sich daher ein Verfahren an, das wir bereits vom Programmieren her kennen.<\/p>\n<p>Wann immer wir eine immer gleiche Information an mehreren Stellen des Programms verwenden m&uuml;ssen, definieren wir eine globale Konstante und verwenden in der Folge dann nur noch diese anstelle des tats&auml;chlichen Wertes. So ist eine &Auml;nderung des Wertes schnell gemacht und die Semantik ist auch sofort klar. Das geht nat&uuml;rlich auch in InnoSetup.<\/p>\n<h2>Konstanten im Setup-Script<\/h2>\n<p>Die Definition der Konstanten erfolgt dabei zwingend am Anfang des Script vor der <b>[Setup]<\/b>-Sektion nach folgendem Muster:<\/p>\n<pre>#define MyAppName \"My Awesome AccessApp\"\r\n#define MyAppVersion \"1.0.0\"\r\n#define MyAppPublisher \"Christoph J&uuml;ngling\"\r\n#define MyAppURL \"https:\/\/www.meine-homepage.de\"\r\n#define MyAppExeName \"Testdatenbank.accdb\"<\/pre>\n<p>Nun k&ouml;nnen wir das obige Script entsprechend &uuml;berarbeiten. Dabei werden die Konstanten nach dem Muster <b>{#NameDerKonstante} <\/b>an der Stelle eingef&uuml;gt, wo deren Wert stehen soll.<\/p>\n<pre>[Setup]\r\nAppId={#MyAppName} \r\nAppName={#MyAppName}\r\nAppVersion={#MyAppVersion}\r\nAppVerName={#MyAppName} v{#MyAppVersion}\r\nAppPublisher={#MyAppPublisher}\r\nAppPublisherURL={#MyAppURL}\r\nAppSupportURL={#MyAppURL}\r\nAppUpdatesURL={#MyAppURL}<\/pre>\n<p>Das obige sind nat&uuml;rlich nur Vorschl&auml;ge. Nach dem nun bekannten Muster lassen sich leicht weitere Konstanten hinzuf&uuml;gen, zum Beispiel um die drei URLs auch wirklich unterschiedlich zu gestalten.<\/p>\n<p>Mindestens eine weitere Information m&uuml;ssen wir noch angeben, und zwar den Ort, an dem die Installation erfolgen soll:<\/p>\n<pre>DefaultDirName={userpf}\\{#MyAppName}<\/pre>\n<p>Diese hei&szlig;t <b>DefaultDirName<\/b>, da das Verzeichnis w&auml;hrend der Installation durch den User noch ge&auml;ndert werden kann. Die vordefinierte Konstante <b>{userpf} <\/b>wird von InnoSetup erst bei der Installation ausgewertet.<\/p>\n<p>Es handelt sich um das benutzerspezifische Programm-Verzeichnis <b>C:\\Users\\USERNAME\\AppData\\Local\\Programs\\ <\/b>(siehe auch im Beitrag <b>Setup f&uuml;r Access-Anwendungen<\/b>, <b>www.access-im-unternehmen.de\/1316 <\/b>unter <b>Wohin mit dem Frontend<\/b>).<\/p>\n<p>In diesem Zusammenhang wird auch noch eine weitere Frage wichtig: Welche Rechte ben&ouml;tigt der User, der dieses Setup ausf&uuml;hren will<\/p>\n<p>Bei &#8222;normalen&#8220; Setups ist es &uuml;blich und auch notwendig, dass man Admin-Berechtigungen hat. Wenn wir aber unsere Applikation wirklich nur im userspezifischen Teil der Festplatte installieren wollen, ist das nicht notwendig, dann gen&uuml;gen die Rechte des Users v&ouml;llig. Das teilen wir dem Setup-Script nat&uuml;rlich ebenfalls mit:<\/p>\n<pre>PrivilegesRequired=lowest<\/pre>\n<p><!--30percent--><\/p>\n<p>Nun k&ouml;nnen Sie das Setup bereits kompilieren, obwohl im Moment nat&uuml;rlich noch gar nichts installiert wird. Zu diesem Zweck dr&uuml;cken Sie <b>F9 <\/b>in InnoSetup oder Inno Script Studio, lassen das Setup durchlaufen und schauen dann in das angegebene Verzeichnis. Dort finden wir im Moment nur zwei Dateien (siehe Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_05\/pic_1326_002.png\" alt=\"Weitgehend leeres Installationsverzeichnis\" width=\"649,559\" height=\"277,6123\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Weitgehend leeres Installationsverzeichnis<\/span><\/b><\/p>\n<p>Es handelt sich um den Uninstaller und die von ihm ben&ouml;tigte Daten-Datei. Zugleich finden wir in der Systemsteuerung unter <b>Programme hinzuf&uuml;gen oder entfernen<\/b> einen passenden Eintrag zu unserer Installation (siehe Bild 3).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_05\/pic_1326_003.png\" alt=\"Eintrag in der Systemsteuerung\" width=\"700\" height=\"309,3023\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Eintrag in der Systemsteuerung<\/span><\/b><\/p>\n<p>Den Button <b>Deinstallieren<\/b> sollten Sie zum Kennenlernen ruhig bet&auml;tigen, und vergewissern Sie sich bitte anschlie&szlig;end, dass das Installationsverzeichnis wieder vollst&auml;ndig verschwunden ist.<\/p>\n<p>Nun haben wir herausgefunden, dass das Setup grunds&auml;tzlich funktioniert. Jetzt wollen wir die Access-Datenbank hinzuf&uuml;gen.<\/p>\n<h2>Was und wohin installieren<\/h2>\n<p>F&uuml;r diese Frage ist die Sektion <b>[Files] <\/b>zust&auml;ndig. Hier werden alle Dateien aufgef&uuml;hrt, die in das Setup eingepackt werden sollen. Das ist vorerst nicht viel in unserem Projekt. Die Syntax lautet in diesem Bereich etwas anders als zu Beginn besprochen, da hier mehrere Informationen pro Datei in einer Zeile erfasst werden:<\/p>\n<pre>key1: value1; key2: value2; key3: value3; ...<\/pre>\n<p>Anstelle des tats&auml;chlichen Dateinamens unserer Access-Datenbankapplikation verwenden wir die oben bereits definierte Konstante:<\/p>\n<pre>[Files]\r\nSource: \"{#MyAppExeName}\"; DestDir: \"{app}\"; Flags: ignoreversion<\/pre>\n<p>Das ist auch nicht schwierig zu verstehen, <b>Source<\/b> und <b>DestDir<\/b> (destination directory) erkl&auml;ren sich wohl selbst. Alle Pfadangaben sind hier &uuml;brigens relativ zu dem Verzeichnis zu verstehen, in dem sich das Setup-Skript mit der Dateiendung <b>.iss<\/b> befindet!<\/p>\n<p>Zus&auml;tzlich wollen wir noch eine <b>Readme<\/b>-Datei hinzuf&uuml;gen. Diese soll am Ende des Setups automatisch angezeigt werden.<\/p>\n<p>Daf&uuml;r kommt eine weitere Zeile in diese Sektion, die &auml;hnlich aussieht (jede Zeile beschreibt eine Datei):<\/p>\n<pre>Source: \"readme.txt\"; DestDir: \"{app}\"; Flags: isreadme<\/pre>\n<p>Hierbei ist das Flag <b>isreadme<\/b> interessant, denn es erzeugt auf der letzten Seite des Setup-Fensters automatisch eine Checkbox f&uuml;r die Anzeige (siehe Bild 4).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_05\/pic_1326_004.png\" alt=\"Readme-Datei anzeigen\" width=\"499,5589\" height=\"393,5017\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Readme-Datei anzeigen<\/span><\/b><\/p>\n<p>Die Angabe <b>{app} <\/b>als Zielverzeichnis referenziert einfach das Installationsverzeichnis, das wie oben beschrieben vor oder w&auml;hrend der Installation festgelegt wurde.<\/p>\n<p>Dieser Eintrag ber&uuml;cksichtigt also auch das, was der User eventuell ver&auml;ndert hat.<\/p>\n<p>Das Flag <b>ignoreversion<\/b> ist sinnvoll, da die Access-Datenbank keine standardisierte Versionsnummer hat wie eine <b>.exe<\/b>-Datei oder eine DLL. Diese w&uuml;rde InnoSetup automatisch auslesen und mit der eventuell schon existierenden Datei vergleichen, so dass nur eine neuere Version installiert wird. Das geht bei Access leider nicht, daher dieses Flag.<\/p>\n<p>Mehr muss in der Sektion <b>[Files] <\/b>in diesem Beispiel nicht stehen.<\/p>\n<p>Wer will, kann das Setup nun erneut kompillieren und ausf&uuml;hren. Danach sollte zus&auml;tzlich die <b>.accdb<\/b>-Datei und die Datei <b>readme.txt <\/b>im Installationsverzeichnis enthalten sein.<\/p>\n<p>Nun k&uuml;mmern wir uns noch um den Startmen&uuml;eintrag und die Desktop-Icons. Daf&uuml;r ben&ouml;tigen wir wieder eine neue Sektion namens <b>[Icons]<\/b>.<\/p>\n<p>Auch hierbei gilt, dass f&uuml;r jedes Icon eine Zeile im Setup-Script ben&ouml;tigt wird. Die im Artikel eventuell dargestellten Zeilenumbr&uuml;che m&uuml;ssen Sie sich also bitte wegdenken.<\/p>\n<pre>[Icons]\r\nName: \"{group}\\{#MyAppName}\"; Filename: \"{app}\\{#MyAppExeName}\"; WorkingDir: \"{app}\"; Flags: useapppaths\r\nName: \"{userdesktop}\\{#MyAppName}\"; Filename: \"{app}\\{#MyAppExeName}\"; WorkingDir: \"{app}\"; Flags: useapppaths<\/pre>\n<p>Der erste Eintrag sorgt f&uuml;r das Icon im Startmen&uuml; (siehe Bild 5). <\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_05\/startmenue.png\" alt=\"Eintrag im Startmen&uuml;\" width=\"674,559\" height=\"553,0015\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Eintrag im Startmen&uuml;<\/span><\/b><\/p>\n<p>Der zweite liefert das Desktop-Icon (siehe Bild 6). In beiden wird die <b>.accdb<\/b>-Datei aus dem Installationsverzeichnis gestartet. Dieser Ort wird wieder &uuml;ber den Platzhalter <b>{app}<\/b> referenziert, der ebenfalls f&uuml;r den Eintrag <b>Working Directory<\/b> verwendet wird.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_05\/pic_1326_008.png\" alt=\"Desktop-Verkn&uuml;pfung  \" width=\"149,5589\" height=\"174,6756\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Desktop-Verkn&uuml;pfung  <\/span><\/b><\/p>\n<p>Das Flag <b>useapppaths<\/b> weist Windows an, automatisch das mit <b>.accdb <\/b>verkn&uuml;pfte Programm aufzurufen. Dadurch sparen wir es uns, den Installationsort von MS Access herausfinden zu m&uuml;ssen und die Kommandozeile zusammenzusetzen.<\/p>\n<p>Damit die Referenz <b>{group} <\/b>vern&uuml;nftig benannt wird, f&uuml;gen wir oben bei den Anfangsdefinitionen noch den entsprechenden Eintrag hinzu:<\/p>\n<pre>DefaultGroupName={#MyAppName}<\/pre>\n<p>Der Eintrag <b>{group} <\/b>ber&uuml;cksichtigt &uuml;brigens automatisch die Unterscheidung zwischen globalem und benutzerspezifischem Eintrag. Bei dem Desktop-Icon m&uuml;ssen wir das per Konstante selbst tun (es gibt auch <b>{commondesktop}<\/b>).<\/p>\n<p>Jetzt wird die Startmen&uuml;-Untergruppe genau so hei&szlig;en wie unser Programm. Das muss nat&uuml;rlich nicht so sein, Sie k&ouml;nnen also jederzeit eine neue Bezeichnung festlegen.<\/p>\n<h2>Sprache<\/h2>\n<p>Vielleicht ist Ihnen bereits aufgefallen, dass das Setup bisher englisch mit uns gesprochen hat. Das ist die Voreinstellung, aber das muss nicht so bleiben, daher wollen wir das noch schnell &auml;ndern. Es macht doch einen besseren Eindruck, wenn der Anwender in der f&uuml;r ihn &uuml;blichen Sprache begr&uuml;&szlig;t wird. Daf&uuml;r ist die Sektion <b>[Languages] <\/b>zust&auml;ndig.<\/p>\n<p>Um <b>Deutsch <\/b>hinzuzuf&uuml;gen, w&uuml;rde die entsprechende Zeile bereits ausreichen. Falls Sie Ihr Programm allerdings weltweit vertreiben wollen, sollte englisch zumindest als Auswahl ebenfalls dabei stehen. Bei Bedarf k&ouml;nnen Sie weitere vordefinierte Sprachen hinzuf&uuml;gen:<\/p>\n<pre>[Languages]\r\nName: \"EN\"; MessagesFile: \"compiler:Default.isl\"\r\nName: \"DE\"; MessagesFile: \"compiler:Languages\\German.isl\"\r\nName: \"NO\"; MessagesFile: \"compiler:Languages\\Norwegian.isl\"\r\nName: \"FR\"; MessagesFile: \"compiler:Languages\\French.isl\"<\/pre>\n<p>F&uuml;r die automatische Erkennung der Sprache bei der Installation ist der Eintrag <b>ShowLanguageDialog <\/b>in der <b>[Setup]<\/b>-Sektion zu empfehlen, denn hierbei gibt es eine Reihe von versteckten Automatiken, die sehr hilfreich sind.<\/p>\n<p>Zun&auml;chst wird die in Windows eingestellte Sprache f&uuml;r die Oberfl&auml;che ermittelt. Wenn diese in der obigen Liste der f&uuml;r das Setup vorgesehenen Sprachen vorhanden ist, wird diese automatisch ausgew&auml;hlt. Durch den Eintrag <b>ShowLanguageDialog=auto <\/b>wird in dem Fall gar nicht erst die Frage nach der Sprache gestellt.<\/p>\n<p>Falls die Sprache jedoch im Setup nicht vorbereitet ist, wird der Sprachdialog (siehe Bild 7) aufgerufen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_05\/pic_1326_005.png\" alt=\"Sprachauswahl\" width=\"424,5589\" height=\"245,426\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Sprachauswahl<\/span><\/b><\/p>\n<p>Dabei wird zun&auml;chst die Sprache verwendet, die in der obigen Liste als erstes steht, der Benutzer kann jedoch seine Wunschsprache aus der Dropdown-Liste ausw&auml;hlen. Jede Sprache wird dabei in genau jener Sprache selbst aufgef&uuml;hrt.<\/p>\n<p>Der Pr&auml;fix <b>compiler:<\/b> bei der Eintragung <b>MessageFile<\/b> bezieht sich &uuml;brigens auf das Installationsverzeichnis von InnoSetup.<\/p>\n<p>Die in <b>[Languages] <\/b>aufgef&uuml;hrten Sprachdateien werden automatisch in das Setup einbezogen, sie m&uuml;ssen also nicht zus&auml;tzlich in den <b>[Files]<\/b>-Abschnitt integriert werden.<\/p>\n<p>An dieser Stelle k&ouml;nnen wir noch auf die eingangs erw&auml;hnten Erweiterungen eingehen.<\/p>\n<p>Um diese zus&auml;tzlichen Informationen in der korrekten Sprache anzuzeigen, f&uuml;gen wir den Zeilen im <b>[Languages]<\/b>-Abschnitt je nach Bedarf weitere Attribute hinzu:<\/p>\n<ul>\n<li><b>LicenseFile<\/b><\/li>\n<li><b>InfoBeforeFile<\/b><\/li>\n<li><b>InfoAfterFile<\/b><\/li>\n<\/ul>\n<p>Beispiel (auch hier gilt wieder, dass pro Sprache eine Zeile zu verwenden ist):<\/p>\n<pre>[Languages]\r\nName: \"EN\"; MessagesFile: \"compiler:Default.isl\"; LicenseFile: \"license-en.txt\"\r\nName: \"DE\"; MessagesFile: \"compiler:Languages\\German.isl\"; LicenseFile: \"license-de.txt\"<\/pre>\n<p>Die Benennung der Dateien f&uuml;r die Lizenz oder die Infos ist dabei willk&uuml;rlich, da die Zuordnung zur Sprache mit Hilfe des entsprechenden <b>Language<\/b>-Eintrags erfolgt. Es ist lediglich f&uuml;r uns Entwickler hilfreich, wenn die Sprache und der Verwendungszweck im Dateinamen enthalten ist.<\/p>\n<p>Die Dateien f&uuml;r diese drei Verwendungszwecke k&ouml;nnen in zwei verschiedenen Formaten vorliegen:<\/p>\n<ul>\n<li>Plain Text (siehe Bild 8)<\/li>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_05\/pic_1326_006.png\" alt=\"Lizenzvereinbarung im Plain Text\" width=\"549,559\" height=\"432,8867\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Lizenzvereinbarung im Plain Text<\/span><\/b><\/p>\n<li>Rich Text Format (siehe Bild 9)<\/li>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_05\/pic_1326_007.png\" alt=\"Lizenzvereinbarung in RTF\" width=\"549,559\" height=\"432,8867\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Lizenzvereinbarung in RTF<\/span><\/b><\/p>\n<\/ul>\n<p>Die Textdatei muss dabei ANSI-codiert sein, UTF8 wird nicht korrekt dargestellt!<\/p>\n<p>W&auml;hrend <b>InfoBeforeFile <\/b>und <b>InfoAfterFile <\/b>einfach nur dargestellt werden, gibt es bei <b>LicenseFile <\/b>eine Besonderheit. Wie in den beiden Screenshots bereits zu erkennen ist, muss der Benutzer die Entscheidung treffen, die Lizenz entweder zu akzeptieren oder abzulehnen.<\/p>\n<p>Aber nur wenn der Benutzer sie akzeptiert, wird der Button <b>Weiter<\/b> freigegeben. Der einzige Nachteil dieser Darstellung ist dann vielleicht, dass das Fenster nicht vergr&ouml;&szlig;erbar ist.<\/p>\n<p>Ich verwende den Lizenz-Dialog in der Regel f&uuml;r einen speziellen Beta-Hinweis, den ich bei Bedarf ein- oder ausschalte. Auf eine einfache M&ouml;glichkeit, nur ein Setup-Script f&uuml;r <b>BETA<\/b>&#8211; und <b>FINAL<\/b>-Version zu erstellen, werden wir in einem weiteren Beitrag eingehen.<\/p>\n<h2>Das Rechtekonzept<\/h2>\n<p>Kommen wir abschlie&szlig;end zu dem vielleicht gr&ouml;&szlig;ten Hindernis f&uuml;r unsere Access-Applikation. Denn wenn Sie slle Einstellungen sorgf&auml;ltig durchgef&uuml;hrt haben, werden Sie sicher auch schon einmal versucht haben, Ihre Applikation zu starten. Hat das funktioniert Wahrscheinlich nicht.<\/p>\n<p>Wir haben im Verlauf unseres Setups bereits festgelegt, dass wir die Applikation im Userbereich installieren wollen und deshalb auf Admin-Berechtigungen verzichten k&ouml;nnen. Doch das betrifft nur die Durchf&uuml;hrung des Setups selbst und hat mit der Applikation nichts zu tun. Access hat da n&auml;mlich auch noch ein W&ouml;rtchen mitzureden.<\/p>\n<p>Wir kennen ja (nicht nur) von Access seit einiger Zeit das Konzept der <b>Vertrauensw&uuml;rdigen Speicherorte<\/b>. Microsoft m&ouml;chte damit verhindern, dass irgendeine Datei mit VBA-Code auf unsere Festplatte gelangt und ohne weitere Kontrolle ausgef&uuml;hrt wird. Leider funktioniert die Verwendung einer digitalen Signatur f&uuml;r die VBA-Makros in Access nicht.<\/p>\n<p>Die meisten Verzeichnisse unserer Platte werden wohl nicht vertrauensw&uuml;rdig sein, und das ist auch gut so. Man k&ouml;nnte sich das theoretisch zwar so einrichten, aber empfehlenswert ist es nicht. Wie Sie sicher wissen, k&ouml;nnen Sie diese Einstellungen f&uuml;r Access-Applikationen in den Optionen einstellen.<\/p>\n<p>Dazu &ouml;ffnen Sie den Optionen-Dialog mit dem Ribbon-Eintrag <b>Datei|Optionen<\/b>, wechseln dort zum Bereich <b>Trust Center<\/b>, klicken auf <b>Einstellungen f&uuml;r das Trust Center <\/b>und f&uuml;gen dann unter <b>Vertrauensw&uuml;rdige Speicherorte <\/b>das entsprechende Verzeichnis hinzu.<\/p>\n<p>Das ist sicher keine gro&szlig;e Sache, und nachdem man das einmal gemacht hat, braucht man sich bei Updates auch nie wieder darum zu k&uuml;mmern. Andererseits sind wir Entwickler, und einen gewissen Drang, auch dieses noch zu automatisieren, versp&uuml;rt wohl ein jeder von uns. Der Aufl&ouml;sung dieses Knotens werden wir uns dann gemeinsam im dritten Teil dieser Beitragsreihe widmen.<\/p>\n<h2>Zusammenfassung<\/h2>\n<p>Wir haben nun gemeinsam ein fast komplettes Setup-Script f&uuml;r eine Access-Applikation entwickelt. Der User wird in seiner Sprache angesprochen, hat ein Mitspracherecht bei der Frage nach dem Installationsort und bekommt Startmen&uuml;- und Desktop-Icon hinzu.<\/p>\n<p>Er musste unsere Lizenz akzeptieren und das Programm l&auml;sst sich wie &uuml;blich deinstallieren. Das Script ist durch die Konstanten auch daf&uuml;r vorbereitet, mit einfachen Anpassungen f&uuml;r weitere Access-Applikationen verwendet zu werden.<\/p>\n<p>Im n&auml;chsten Teil werden wir uns dann der Automatisierung des Eintrags f&uuml;r die vertrauensw&uuml;rdigen Speicherorte widmen und dabei einen kleinen Einblick in die Programmierm&ouml;glichkeiten von InnoSetup erhalten.<\/p>\n<p>Au&szlig;erdem wird es noch einen Tipp geben, wie wir sicherstellen k&ouml;nnen, dass die Access-Applikation nicht l&auml;uft, wenn wir sie updaten wollen. Die einfache Unterscheidung zwischen Beta- und Final-Version w&auml;re ebenfalls eine M&ouml;glichkeit. Und die digitale Signatur unserer <b>.exe<\/b>-Datei ist dann noch das Sahneh&auml;ubchen auf dem Kuchen. Dann ist das Setup &#8222;rund&#8220;.<\/p>\n<p>Und dieser ganze Aufwand nur, um unsere User zufrieden zu stellen Ja, ich denke, das ist es wert.<\/p>\n<h2>Downloads zu diesem Beitrag<\/h2>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>license-de.rtf<\/p>\n<p>license-de.txt<\/p>\n<p>license-en.txt<\/p>\n<p>readme.txt<\/p>\n<p>setup.iss<\/p>\n<p>Testapplikation.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/C06501F5-3E93-4AAC-9FFA-088410545CBF\/aiu_1326.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im ersten Teil haben wir uns mit den Grundlagen eines Setups besch&auml;ftigt, nun geht es &#8222;in medias res&#8220;. Dieser Teil beinhaltet die konkrete Umsetzung der Gedanken. Wir schauen uns das Setup-Script im Detail an und lernen, was die einzelnen Bestandteile bedeuten. Wir werden neben der Access-Datenbank auch Startmen&uuml;-Eintr&auml;ge und Desktop-Icons anlegen. Die Setup-Sprache wird variabel gemacht, es darf eine Lizenzvereinbarung geben, und es wird f&uuml;r eine ordnungsgem&auml;&szlig;e Deinstallation gesorgt. <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662021,66052021,44000039],"tags":[],"class_list":["post-55001326","post","type-post","status-publish","format-standard","hentry","category-662021","category-66052021","category-Setup_und_Weitergabe"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Setup f&uuml;r Access: Umsetzung mit InnoSetup - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/Setup_fuer_Access_Umsetzung_mit_InnoSetup\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Setup f&uuml;r Access: Umsetzung mit InnoSetup\" \/>\n<meta property=\"og:description\" content=\"Im ersten Teil haben wir uns mit den Grundlagen eines Setups besch&auml;ftigt, nun geht es &quot;in medias res&quot;. Dieser Teil beinhaltet die konkrete Umsetzung der Gedanken. Wir schauen uns das Setup-Script im Detail an und lernen, was die einzelnen Bestandteile bedeuten. Wir werden neben der Access-Datenbank auch Startmen&uuml;-Eintr&auml;ge und Desktop-Icons anlegen. Die Setup-Sprache wird variabel gemacht, es darf eine Lizenzvereinbarung geben, und es wird f&uuml;r eine ordnungsgem&auml;&szlig;e Deinstallation gesorgt.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Setup_fuer_Access_Umsetzung_mit_InnoSetup\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2021-09-29T22:11:38+00:00\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"15\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Setup_fuer_Access_Umsetzung_mit_InnoSetup\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Setup_fuer_Access_Umsetzung_mit_InnoSetup\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Setup f&uuml;r Access: Umsetzung mit InnoSetup\",\"datePublished\":\"2021-09-29T22:11:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Setup_fuer_Access_Umsetzung_mit_InnoSetup\\\/\"},\"wordCount\":2860,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"articleSection\":[\"2021\",\"5\\\/2021\",\"Setup und Weitergabe\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Setup_fuer_Access_Umsetzung_mit_InnoSetup\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Setup_fuer_Access_Umsetzung_mit_InnoSetup\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Setup_fuer_Access_Umsetzung_mit_InnoSetup\\\/\",\"name\":\"Setup f&uuml;r Access: Umsetzung mit InnoSetup - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"datePublished\":\"2021-09-29T22:11:38+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Setup_fuer_Access_Umsetzung_mit_InnoSetup\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Setup_fuer_Access_Umsetzung_mit_InnoSetup\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Setup_fuer_Access_Umsetzung_mit_InnoSetup\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Setup f&uuml;r Access: Umsetzung mit InnoSetup\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Setup f&uuml;r Access: Umsetzung mit InnoSetup - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/Setup_fuer_Access_Umsetzung_mit_InnoSetup\/","og_locale":"de_DE","og_type":"article","og_title":"Setup f&uuml;r Access: Umsetzung mit InnoSetup","og_description":"Im ersten Teil haben wir uns mit den Grundlagen eines Setups besch&auml;ftigt, nun geht es \"in medias res\". Dieser Teil beinhaltet die konkrete Umsetzung der Gedanken. Wir schauen uns das Setup-Script im Detail an und lernen, was die einzelnen Bestandteile bedeuten. Wir werden neben der Access-Datenbank auch Startmen&uuml;-Eintr&auml;ge und Desktop-Icons anlegen. Die Setup-Sprache wird variabel gemacht, es darf eine Lizenzvereinbarung geben, und es wird f&uuml;r eine ordnungsgem&auml;&szlig;e Deinstallation gesorgt.","og_url":"https:\/\/access-im-unternehmen.de\/Setup_fuer_Access_Umsetzung_mit_InnoSetup\/","og_site_name":"Access im Unternehmen","article_published_time":"2021-09-29T22:11:38+00:00","author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"15\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Setup_fuer_Access_Umsetzung_mit_InnoSetup\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Setup_fuer_Access_Umsetzung_mit_InnoSetup\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Setup f&uuml;r Access: Umsetzung mit InnoSetup","datePublished":"2021-09-29T22:11:38+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Setup_fuer_Access_Umsetzung_mit_InnoSetup\/"},"wordCount":2860,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"articleSection":["2021","5\/2021","Setup und Weitergabe"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Setup_fuer_Access_Umsetzung_mit_InnoSetup\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Setup_fuer_Access_Umsetzung_mit_InnoSetup\/","url":"https:\/\/access-im-unternehmen.de\/Setup_fuer_Access_Umsetzung_mit_InnoSetup\/","name":"Setup f&uuml;r Access: Umsetzung mit InnoSetup - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"datePublished":"2021-09-29T22:11:38+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Setup_fuer_Access_Umsetzung_mit_InnoSetup\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Setup_fuer_Access_Umsetzung_mit_InnoSetup\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Setup_fuer_Access_Umsetzung_mit_InnoSetup\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Setup f&uuml;r Access: Umsetzung mit InnoSetup"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001326","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55001326"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001326\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001326"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001326"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001326"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}