OD Installer

Ship your Windows app as one clean installer. Distribuez votre application Windows en un seul installeur propre.

OD Installer turns your .NET desktop application into a single, self-contained setup EXE. One file for your users: a clear setup wizard, your license, real shortcuts and a clean uninstall. OD Installer transforme votre application .NET de bureau en un seul EXE d'installation autonome. Un seul fichier pour vos utilisateurs : assistant d'installation clair, votre licence, des raccourcis réels et une désinstallation propre.

Download the latest version Télécharger la dernière version

OD Installer is DonationWare: free to use, and donations from those who find it useful support its development.OD Installer est un logiciel DonationWare : libre d'utilisation, et les dons de celles et ceux qui l'apprécient soutiennent son développement.

Buy Me a Coffee
OD Installer configurator window
Everything is configured visually — your installer.json is built for you.Tout se configure visuellement — votre installer.json est généré pour vous.
OD Installer setup wizard window
Your users get a clean, guided setup experience.Vos utilisateurs profitent d'une installation guidée et soignée.

Made for OD HarmoToolsConçu pour OD HarmoTools

OD Installer was built to ship OD HarmoTools, a harmony workspace for musicians. Try it to see the installer in action.OD Installer a été créé pour distribuer OD HarmoTools, un espace de travail d'harmonie pour musiciens. Essayez-le pour voir l'installeur en action.

Download OD HarmoToolsTélécharger OD HarmoTools

For those who want to know exactly how it worksPour celles et ceux qui veulent savoir exactement comment ça fonctionne

Technical detailsDétails techniques

How it worksPrincipe

OD Installer produces one EXE: a self-contained WPF setup host followed by a standard ZIP payload. The host finds its payload from a footer marker (ODINST02) and the payload length, so the installer can be copied and launched alone. The ZIP can be inspected with any standard archive tool, and the finished EXE can be code-signed with signtool afterwards.OD Installer produit un seul EXE : un hôte de configuration WPF auto-contenu suivi d'une archive ZIP standard. L'hôte retrouve son payload grâce à un marqueur de pied de page (ODINST02) et à la longueur du payload : l'installeur peut donc être copié et lancé seul. L'archive ZIP peut être inspectée avec n'importe quel outil d'archivage standard, et l'EXE final peut être signé avec signtool a posteriori.

FeaturesFonctionnalités

  • Graphical configurator (WPF) — create and edit installer.json without touching raw JSON.Configurateur graphique (WPF) — créer et modifier installer.json sans toucher au JSON brut.
  • Builder CLI — one command to validate, package and produce the installer EXE.Builder en ligne de commande — une commande pour valider, empaqueter et produire l'EXE d'installation.
  • Per-user installation — the user can choose the installation folder.Installation per-user — l'utilisateur peut choisir le dossier d'installation.
  • Real .lnk shortcuts — created through the shell's COM interface, with the working directory set correctly.Raccourcis .lnk réels — créés via l'interface COM du shell, avec le répertoire de travail configuré correctement.
  • HKCU uninstall entry — registered for standard removal from Windows.Entrée de désinstallation HKCU — enregistrée pour une suppression standard dans Windows.
  • Multiple source folders — map source directories to destinations, with {LocalAppData} and <Application> placeholders.Plusieurs dossiers sources — mapper des répertoires sources vers des destinations, avec les placeholders {LocalAppData} et <Application>.
  • Manifest-based uninstaller — removes only what it installed; unknown files are preserved.Désinstalleur à manifeste — ne supprime que ce qu'il a installé ; les fichiers inconnus sont préservés.

SecuritySécurité

  • Source paths are validated; paths outside the manifest folder and reparse points are rejected.Les chemins sources sont validés ; les chemins en dehors du dossier du manifeste et les points de reparse sont rejetés.
  • The manifest is revalidated against the packaged content at install time (defense in depth).Le manifeste est revalidé par rapport au contenu empaqueté au moment de l'installation (défense en profondeur).
  • ZIP extraction happens only after each entry is resolved beneath a private temporary folder.L'extraction ZIP n'intervient qu'après que chaque entrée a été résolue sous un dossier temporaire privé.

ArchitectureArchitecture

Five projects compose the solution:Cinq projets composent la solution :

  • CoreCore — models, validation, file and package safety.— modèles, validation, sécurité des fichiers et des paquets.
  • ConfiguratorConfigurator — WPF GUI to create and edit installer.json.— interface WPF pour créer et modifier installer.json.
  • BuilderBuilder — CLI that reads, validates, packages and produces the installer EXE.— ligne de commande qui lit, valide, emballe et produit l'EXE d'installation.
  • SetupSetup — WPF installation wizard shown to the end user.— assistant d'installation WPF présenté à l'utilisateur final.
  • UninstallerUninstaller — confirms, removes listed shortcuts, files and registry keys, deletes only empty directories, and schedules deletion of its own executable after exit.— confirme, supprime les raccourcis, fichiers et clés de registre listés, ne supprime que les répertoires vides, et planifie la suppression de son propre exécutable après la sortie.

Build and generateCompiler et générer

  1. Build the solution: dotnet build OD.Installer.slnx -c ReleaseCompiler la solution : dotnet build OD.Installer.slnx -c Release
  2. Create or edit installer.json with the graphical configurator: dotnet run --project src/OD.Installer.ConfiguratorCréer ou modifier installer.json avec le configurateur graphique : dotnet run --project src/OD.Installer.Configurator
  3. Create the self-contained installation runtime: ./build-runtime.ps1Créer le runtime d'installation auto-contenu : ./build-runtime.ps1
  4. Put the published application files in the source directory and the license in LICENSE.txtPlacer les fichiers publiés de l'application dans le répertoire source et la licence dans LICENSE.txt
  5. Run the builder: dotnet run --project src/OD.Installer.Builder -- build installer.json --forceLancer le builder : dotnet run --project src/OD.Installer.Builder -- build installer.json --force

MVP limitationsLimites du MVP

  • Per-user installation only (no per-machine).Installation per-user uniquement (pas per-machine).
  • Full archive per installer; this is not a differential updater.Archive complète par installeur ; pas de mise à jour différentielle.
  • Windows only.Windows uniquement.