; Installer fuer das Steuerrechnungstool (Inno Setup 6) ; ; ENTSCHEIDUNGEN, DIE HIER STECKEN - und warum ; -------------------------------------------- ; 1. INSTALLATION PRO BENUTZER nach %LOCALAPPDATA%\Programs, NICHT nach ; "Program Files". Grund: der Updater muss die EXE ablegen duerfen. In ; Program Files darf ein normaler Benutzer nicht schreiben - jedes Update ; wuerde an fehlenden Rechten scheitern oder eine Administrator-Abfrage ; erzwingen. Chrome, VS Code, Discord, Teams und Fusion 360 machen es ; genauso, aus demselben Grund. ; ; 2. DIE VERKNUEPFUNG ZEIGT AUF DEN UPDATER, nicht auf das Programm. So schaut ; jeder Start zuerst nach einer neuen Fassung. Der Updater startet danach ; die eigentliche EXE - die ist dabei noch gar nicht in Benutzung und laesst ; sich deshalb problemlos ersetzen. ; ; 3. KEINE DATEN ANFASSEN. Der Installer legt keine Rechnungsordner an, kein ; Journal, kein Nummernbuch - und beim Deinstallieren wird davon nichts ; entfernt. Das Programm schreibt aufbewahrungspflichtige Belege ; (§ 147 AO, zehn Jahre). Ein Deinstallieren darf sie nie mitnehmen. ; ; 4. Der Eintrag unter "Apps & Features" entsteht von selbst - Inno Setup legt ; den Registry-Schluessel unter HKCU an. Da muss niemand von Hand hinein. #define Name "Steuerrechnungstool" #define Herausgeber "ravokk" #define ExeUpdater "Updater.exe" #define Webseite "https://git.pcore.de/TheMockTv/Steuerrechnungstool" [Setup] AppId={{B4D71E08-9C36-42AF-8E5B-13A7F0C29D64} AppName={#Name} AppVersion={#Version} AppVerName={#Name} {#Version} AppPublisher={#Herausgeber} AppPublisherURL={#Webseite} AppSupportURL={#Webseite}/issues AppUpdatesURL={#Webseite}/releases ; --- pro Benutzer, ohne Adminrechte --- PrivilegesRequired=lowest ; Der Zielordner ist NICHT waehlbar. Wer hier "Programme" auswaehlen ; koennte, braeche sich den Updater: dort darf ein normaler Benutzer ; nicht schreiben. Chrome, Teams und Discord blenden diese Seite aus ; demselben Grund aus. In "Programme" gehoert hoechstens eine ; Verknuepfung - und die liegt ohnehin im Startmenue. DisableDirPage=yes ; EIN Verzeichnis fuer beides - seine Ansage am 07.09.2026: ; "es gibt ravokk als main verzeichnis, da liegt config und sqlite ; drin, und dann gibt es den ordner rechnungstool und steuertool" ; ; %LOCALAPPDATA%\ravokk\ ; campinghof-nummernbuch.sqlite3 <- gemeinsam, beide schauen hierher ; Rechnungstool\ <- Programm + Updater ; Steuerrechnungstool\ <- Programm + Updater ; ; Jedes Programm in seinem eigenen Unterordner: die beiden Updater heissen ; gleich und wuerden sich sonst gegenseitig ueberschreiben. ; ; Das Nummernbuch liegt eine Ebene DARUEBER und gehoert keinem der beiden. ; Ein Deinstallieren nimmt es deshalb nicht mit - und wer nur eines der ; Programme installiert, legt es trotzdem am richtigen Ort an ; (gemeinsam.standard_ordner). DefaultDirName={localappdata}\ravokk\{#Name} DefaultGroupName={#Name} DisableProgramGroupPage=yes UsePreviousAppDir=yes OutputDir=setup OutputBaseFilename=Steuerrechnungstool-Setup-{#Version} Compression=lzma2 SolidCompression=yes WizardStyle=modern SetupIconFile=assets\programm.ico UninstallDisplayIcon={app}\{#ExeProgramm} ArchitecturesInstallIn64BitMode=x64compatible ; Erprobungsfassung - das steht auch im Programm selbst. AppComments=Erprobungsfassung. Benutzung auf eigene Gefahr. [Languages] Name: "deutsch"; MessagesFile: "compiler:Languages\German.isl" [Tasks] ; Kein "unchecked": der Haken ist vorgesetzt. Er hatte nach dem ; Installieren kein Symbol auf dem Desktop und musste das Programm ; suchen (07.09.2026). Wer es nicht will, nimmt den Haken heraus. Name: "desktopicon"; Description: "Verknüpfung auf dem Desktop anlegen"; \ GroupDescription: "Zusätzliche Verknüpfungen:" [Files] ; Der Updater - das ist, was der Benutzer startet. Source: "dist\{#ExeUpdater}"; DestDir: "{app}"; Flags: ignoreversion ; Das Programm selbst, mit der Nummer im Namen. Der Updater erkennt daran, ; was installiert ist, und legt neue Fassungen daneben statt darueber. Source: "dist\{#ExeProgramm}"; DestDir: "{app}"; Flags: ignoreversion [Icons] ; Beide Verknuepfungen zeigen auf den UPDATER, nicht auf das Programm. ; IconFilename ausdruecklich: ohne das erbt die Verknuepfung das Symbol vom ; UPDATER, und Windows zeigte an ihrer Stelle das nackte Standardsymbol. Name: "{group}\{#Name}"; Filename: "{app}\{#ExeUpdater}"; IconFilename: "{app}\{#ExeProgramm}" Name: "{group}\{#Name} deinstallieren"; Filename: "{uninstallexe}" Name: "{userdesktop}\{#Name}"; Filename: "{app}\{#ExeUpdater}"; IconFilename: "{app}\{#ExeProgramm}"; Tasks: desktopicon [Run] Filename: "{app}\{#ExeUpdater}"; Description: "{#Name} jetzt starten"; \ Flags: nowait postinstall skipifsilent [UninstallDelete] ; Was der INSTALLER gelegt hat, raeumt Inno Setup von selbst weg. Hier ; steht, was der UPDATER angelegt hat - davon weiss der Installer nichts: ; -.exe jede geladene Fassung ; installiert.json die Buchfuehrung des Updaters ; Ohne diese Zeilen bleibt der Ordner voller alter EXEs stehen. ; ; NICHT geloescht werden Rechnungen, Journal und Nummernbuch. Die liegen ; ohnehin woanders (%LOCALAPPDATA%/ravokk) und muessen zehn Jahre bleiben ; (§ 147 AO). Deshalb steht hier auch kein 'Type: filesandordirs' auf ; {app} - das waere die bequeme, aber falsche Zeile. Type: files; Name: "{app}\installiert.json" Type: files; Name: "{app}\{#Name}-*.exe" Type: files; Name: "{app}\Updater.exe" ; Zum Schluss den Ordner selbst - aber NUR, wenn er leer ist. Type: dirifempty; Name: "{app}"