feat(cli): add dedicated Inno Setup installer for the Windows CLI

Installateur Inno Setup séparé de la GUI (validé GO par Qwen), pour tests
internes et intégration de la brique CLI dans un autre logiciel.

- installer/Anonymisation-CLI.iss : AppId distinct de la GUI
  (B2F4A7C1-…), PrivilegesRequired=lowest, DefaultDirName
  {localappdata}\Programs\Anonymisation-CLI, source dist\Anonymisation-CLI.exe.
  Clés registre HKCU stables (InstallPath/ExePath/Version) + App Paths HKCU
  pour résolution tierce, supprimées à la désinstallation (uninsdeletekey).
  Pas de PATH système, pas de raccourci bureau. GUI .iss non modifiée.
- installer/Anonymisation-CLI-README.txt : usage, codes retour, lookup registre.
- scripts/build_windows_cli_installer_only.ps1 : build ISCC dédié,
  sortie release\Anonymisation-CLI-Setup.exe + SHA-256.
- docs/build-windows-oneclick.md : section « Installateur CLI dédié ».

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-10 16:44:58 +02:00
parent 263126dafa
commit 26f0cdfd68
4 changed files with 219 additions and 0 deletions

View File

@@ -0,0 +1,56 @@
Anonymisation-CLI
=================
Outil en ligne de commande (sans interface graphique) pour anonymiser un
document médical unique (ou un dossier).
UTILISATION
-----------
Anonymisation-CLI.exe "C:\chemin\document.pdf" "C:\chemin\sortie"
Anonymisation-CLI.exe --help
- argument 1 : fichier unique existant (ou dossier parcouru récursivement) ;
- argument 2 : dossier de sortie (créé si absent) ; --out reste accepté ;
- chemins avec espaces et accents supportés.
Sorties produites dans le dossier demandé :
<doc>.redacted_raster.pdf (PDF anonymisé)
<doc>.pseudonymise.txt (texte pseudonymisé)
<doc>.audit.jsonl (audit / traçabilité)
Un log est écrit à côté de l'exécutable : anonymisation_cli.log
CODES RETOUR
------------
0 anonymisation terminée, sortie produite
1 erreur de traitement
2 entrée manquante (fichier/dossier introuvable, aucun document)
3 modèle obligatoire absent (CamemBERT-bio ONNX) — échec fail-closed
4 sortie non produite (quarantaine résiduelle ou PDF absent)
INTÉGRATION DANS UN AUTRE LOGICIEL
----------------------------------
L'installateur écrit des clés de registre HKCU stables :
HKCU\Software\CHUXX\Anonymisation-CLI
InstallPath = dossier d'installation
ExePath = chemin complet de Anonymisation-CLI.exe
Version = version installée
App Paths (résolution standard Windows) :
HKCU\Software\Microsoft\Windows\CurrentVersion\App Paths\Anonymisation-CLI.exe
(Default) = chemin complet de l'exe
Path = dossier d'installation
Exemple PowerShell pour retrouver l'exe :
$exe = (Get-ItemProperty 'HKCU:\Software\CHUXX\Anonymisation-CLI').ExePath
& $exe "C:\doc.pdf" "C:\sortie"
MODÈLES
-------
- CamemBERT-bio ONNX : OBLIGATOIRE (embarqué). Absent -> code 3, pas de mode
dégradé silencieux.
- EDS-Pseudo / GLiNER : optionnels. Leur absence est tracée dans le log ;
le traitement se poursuit avec CamemBERT-bio.

View File

@@ -0,0 +1,52 @@
; Installateur Inno Setup DÉDIÉ au CLI (distinct de la GUI Anonymisation.iss).
; Cible : tests internes + intégration de la brique CLI dans un autre logiciel.
; - AppId distinct de la GUI (ne partage pas la désinstallation)
; - installation utilisateur sans droits admin (PrivilegesRequired=lowest)
; - clés registre HKCU stables (InstallPath / ExePath / Version) + App Paths HKCU
; pour qu'un autre logiciel retrouve l'exe ; PAS d'ajout au PATH système.
#define MyAppName "Anonymisation-CLI"
#define MyAppPublisher "CHUXX"
#define MyAppExeName "Anonymisation-CLI.exe"
#ifndef AppVersion
#define AppVersion "1.0.0"
#endif
[Setup]
; AppId PROPRE au CLI (différent du GUID GUI 6D11E4F8-...) — ne pas réutiliser ailleurs.
AppId={{B2F4A7C1-9E3D-4A52-8C77-1D6E0A9B4F30}
AppName={#MyAppName}
AppVersion={#AppVersion}
AppPublisher={#MyAppPublisher}
DefaultDirName={localappdata}\Programs\{#MyAppName}
DisableDirPage=no
DisableProgramGroupPage=yes
PrivilegesRequired=lowest
OutputDir=..\release
OutputBaseFilename=Anonymisation-CLI-Setup
SetupIconFile=..\assets\icons\app.ico
UninstallDisplayIcon={app}\{#MyAppExeName}
Compression=lzma2
SolidCompression=yes
WizardStyle=modern
ArchitecturesAllowed=x64compatible
ArchitecturesInstallIn64BitMode=x64compatible
[Languages]
Name: "french"; MessagesFile: "compiler:Languages\French.isl"
[Files]
Source: "..\dist\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
Source: "Anonymisation-CLI-README.txt"; DestDir: "{app}"; DestName: "README.txt"; Flags: ignoreversion skipifsourcedoesntexist
[Registry]
; Clés stables pour intégration logicielle tierce (HKCU, supprimées à la désinstallation).
Root: HKCU; Subkey: "Software\{#MyAppPublisher}\{#MyAppName}"; ValueType: string; ValueName: "InstallPath"; ValueData: "{app}"; Flags: uninsdeletekey
Root: HKCU; Subkey: "Software\{#MyAppPublisher}\{#MyAppName}"; ValueType: string; ValueName: "ExePath"; ValueData: "{app}\{#MyAppExeName}"
Root: HKCU; Subkey: "Software\{#MyAppPublisher}\{#MyAppName}"; ValueType: string; ValueName: "Version"; ValueData: "{#AppVersion}"
; App Paths HKCU : permet à un tiers de résoudre Anonymisation-CLI.exe via la base de registre.
Root: HKCU; Subkey: "Software\Microsoft\Windows\CurrentVersion\App Paths\{#MyAppExeName}"; ValueType: string; ValueName: ""; ValueData: "{app}\{#MyAppExeName}"; Flags: uninsdeletekey
Root: HKCU; Subkey: "Software\Microsoft\Windows\CurrentVersion\App Paths\{#MyAppExeName}"; ValueType: string; ValueName: "Path"; ValueData: "{app}"
[Icons]
; Pas de raccourci bureau pour un CLI ; entrée menu Démarrer vers le README (aide).
Name: "{autoprograms}\{#MyAppName} (README)"; Filename: "{app}\README.txt"