Project 12: Capstone - A Modular System Monitoring Tool
A complete, deployable system utility. The tool consists of a background Windows Service that collects system metrics and a GUI “dashboard” application that communicates with the service to display the data in real-time. The entire system will be packaged in an MSI or MSIX installer.
Quick Reference
| Attribute | Value |
|---|---|
| Primary Language | C++ |
| Alternative Languages | C |
| Difficulty | Level 4: Expert |
| Time Estimate | 1 month+ |
| Knowledge Area | Systems Integration |
| Tooling | Win32 API, CMake, WiX/MSIX |
| Prerequisites | All previous projects, or a very solid understanding of the concepts they teach. |
What You Will Build
A complete, deployable system utility. The tool consists of a background Windows Service that collects system metrics and a GUI “dashboard” application that communicates with the service to display the data in real-time. The entire system will be packaged in an MSI or MSIX installer.
Why It Matters
This project builds core skills that appear repeatedly in real-world systems and tooling.
Core Challenges
- Designing an Inter-Process Communication (IPC) mechanism → maps to choosing and implementing a way for the GUI to talk to the service (e.g., Named Pipes, Sockets)
- Creating a multi-project CMake solution → maps to managing a shared code library, a service executable, and a GUI executable
- Developing a native GUI → maps to using the raw Win32 API for UI (hard), or a framework like WinUI 3 or Qt (recommended)
- Bundling multiple executables into one installer → maps to installing both the service and the GUI app, and configuring the service to start
- Handling permissions → maps to the service running as a privileged user while the GUI runs as the standard user
Key Concepts
- Inter-Process Communication: Microsoft Docs - IPC Overview
- Named Pipes: “Windows System Programming, 4th Edition” - Chapter 11
- Multi-project CMake: “Professional CMake: A Practical Guide” by Craig Scott
- Installer with Services: WiX documentation on the
<ServiceInstall>element.
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 - “Windows Internals, Part 1 & 2” by Russinovich, Solomon, and Ionescu