rechnungstool/Installer.iss
TheMockTv 9794632ae4 Alles unter ravokk - und ein Deinstallieren laesst nichts liegen
Seine Ansagen
  "gibt es noch das popup install ordner auswaehlen, das stimmt ja nicht"
  "wie soll das rechnungstool und steuertool wissen wo es ist, das muss in
   ravokk liegen und dann zusammen, sonst kommt das eine nicht an das andere
   ran - die sind doch nur ueber die gemeinsame sqlite verbunden und mit api"
  "es gibt ravokk als main verzeichnis, da liegt config und sqlite drin, und
   dann gibt es den ordner rechnungstool und steuertool"
  "ravokk ist meine firma und die programme gehoeren zu der firma"
  "du solltest die auch mal deinstallieren und neu installieren ... dass der
   ordner dann leer ist und sauber - will keine tools die unsauber sind"

Die Struktur
  %LOCALAPPDATA%/ravokk/
      config.json, journal.sqlite3, Nummernbuch, berichte/   <- Daten
      Rechnungstool/                                          <- Programm
      Steuerrechnungstool/                                    <- Programm

  Die Daten liegen NEBEN dem Programm, nicht darin. Nur dadurch koennen
  beide Forderungen gleichzeitig gelten: der Programmordner wird beim
  Deinstallieren restlos geleert, und die Belege bleiben zehn Jahre stehen
  (§ 147 AO).

Kein Ordner-Dialog mehr beim ersten Start
  gemeinsam.standard_ordner() nennt den festen Ort, beide Programme legen
  ihn selbst an. Gefragt wird nur noch, wer ihn ausdruecklich verschieben
  will (Menue -> Gemeinsamer Ordner) - etwa auf ein Netzlaufwerk.

  Der Knopf hiess "Install-Ordner auswaehlen..." und der Text riet zum
  "Ordner, in dem die Programme liegen". Beides war falsch und seit dem
  Installer erst recht: die beiden liegen in getrennten Unterordnern, und
  ein Deinstallieren haette das Nummernbuch mitgenommen.

⚠ Dabei gefunden: das Journal lag im TEMP-Ordner
  Der Merkzettel der installierten Fassung zeigte auf
  %TEMP%/abnahme_bst/Daten - haengengeblieben aus einem Abnahmelauf vom
  03.09. Windows raeumt den Temp-Ordner automatisch auf; das Journal waere
  ohne Vorwarnung verschwunden. ablage.py verwirft einen solchen Merkzettel
  jetzt, statt ihm zu folgen.

Uninstaller
  Er raeumt jetzt auch, was der UPDATER angelegt hat - jede geladene Fassung
  und installiert.json. Die kannte der Installer nicht; mit jeder Fassung
  waere eine EXE mehr liegen geblieben. Gemessen vorher: zwei EXEs und der
  halbe Datenordner.

pruef_installation.py
  Installiert wirklich, legt eine Datei an wie der Updater es taete,
  deinstalliert und sieht nach: Programmordner leer, Daten unangetastet.
  Vorhandene Daten werden vorher gesichert und danach zurueckgelegt - ein
  Pruefstand fasst niemandem seine Buchhaltung an.

pruef_gemeinsam_automatisch.py
  Prueft, dass beide Programme denselben Ordner nennen und dass findet, was
  das andere eintraegt - ohne dass jemand einen Pfad eingegeben hat.

Symbol
  Das Windows-Symbol ist jetzt eine helle Kachel mit runden Ecken und dem
  Zeichen darauf, in allen Groessen von 16 bis 256 - "so wie das rustdesk,
  nur halt alle ecken in der rundung". Ein freigestelltes Logo ging auf
  einem dunklen Desktop unter. Die zweite, aufgehellte ICO ist damit
  ueberfluessig; das aufgehellte Logo IM Programm (Kopfzeile, Wasserzeichen)
  bleibt unveraendert.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V4t48uxDok5rJXhC9bX1Ax
2026-09-07 10:43:09 +02:00

127 lines
No EOL
5.7 KiB
Text

; Installer fuer das Rechnungstool (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 "Rechnungstool"
#define Herausgeber "ravokk"
#define ExeUpdater "Updater.exe"
#define Webseite "https://git.pcore.de/TheMockTv/rechnungstool"
[Setup]
AppId={{7F3A9C2E-51D4-4B86-9A17-2C0E8B4D6A31}
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=Rechnungstool-Setup-{#Version}
Compression=lzma2
SolidCompression=yes
WizardStyle=modern
; Das Programmsymbol - auch fuer den Installer selbst und den
; Eintrag unter "Apps & Features".
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:
; <Name>-<Nummer>.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}"