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

  1. Reproduce the simplest happy-path scenario.
  2. Build the smallest working version of the core feature.
  3. Add input validation and error handling.
  4. Add instrumentation/logging to confirm behavior.
  5. 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