Project 6: WiX Toolset MSI Installer
A standard MSI installer for one of your previous projects (e.g., the
my_lstool from Project 2). The installer will place the executable inC:\Program Files, create a Start Menu shortcut, and add an entry in “Add/Remove Programs”.
Quick Reference
| Attribute | Value |
|---|---|
| Primary Language | WiX (XML) |
| Alternative Languages | N/A |
| Difficulty | Level 2: Intermediate |
| Time Estimate | Weekend |
| Knowledge Area | Deployment / Installers |
| Tooling | WiX Toolset, MSI |
| Prerequisites | A compiled .exe from a previous project. |
What You Will Build
A standard MSI installer for one of your previous projects (e.g., the my_ls tool from Project 2). The installer will place the executable in C:\Program Files, create a Start Menu shortcut, and add an entry in “Add/Remove Programs”.
Why It Matters
This project builds core skills that appear repeatedly in real-world systems and tooling.
Core Challenges
- Understanding WiX XML syntax → maps to describing your product, components, and features declaratively
- Defining components and GUIDs → maps to the core principle of MSI: every component needs a unique, stable ID
- Creating directories and shortcuts → maps to using standard MSI properties and WiX elements
- Compiling and linking the WiX project → maps to using
candle.exeandlight.exeto create the MSI
Key Concepts
- MSI Components and Features: WiX Tutorial - “Your First Installation”
- WiX Directory Structure: WiX documentation on the
<Directory>element. - GUIDs in MSI: WiX Tutorial - “It’s a GUID World”
Real-World Outcome
Deliver a working demo with observable output that proves the feature is correct.
Implementation Guide
- Reproduce the simplest happy-path scenario.
- Build the smallest working version of the core feature.
- Add input validation and error handling.
- Add instrumentation/logging to confirm behavior.
- Refactor into clean modules with tests.
Milestones
- Milestone 1: Minimal working program that runs end-to-end.
- Milestone 2: Correct outputs for typical inputs.
- Milestone 3: Robust handling of edge cases.
- Milestone 4: Clean structure and documented usage.
Validation Checklist
- Output matches the real-world outcome example
- Handles invalid inputs safely
- Provides clear errors and exit codes
- Repeatable results across runs
References
- Main guide:
LEARN_WINDOWS_SYSTEMS_PROGRAMMING_CPP.md - “WiX: A Developer’s Guide to Windows Installer XML” by Nick Ramirez