Contributing to Wheels Windows Installer
Repository
The Wheels Windows Installer is located in the main Wheels repository at tools/installer/windows/:
Development Setup
Prerequisites
Windows 10/11
Inno Setup 6.0+ (Download)
PowerShell 5.1+ (built into Windows)
Git
Administrator privileges (for testing installations)
Initial Setup
Clone the Wheels repository:
git clone https://github.com/wheels-dev/wheels.git cd wheels/tools/installer/windowsVerify Inno Setup installation:
# Should open Inno Setup Compiler & "C:\Program Files (x86)\Inno Setup 6\Compil32.exe" /?
Installer Structure
tools/installer/windows/
├── install-wheels.iss # Inno Setup GUI installer (Pascal)
├── install-wheels.ps1 # PowerShell installation engine
├── installer/ # Build output directory
│ └── wheels-installer.exe # Generated installer executable
└── README.md # Developer technical guideArchitecture Overview
The installer uses a two-component architecture:
Inno Setup Script (
install-wheels.iss): Professional Windows GUI that collects user preferences through wizard pagesPowerShell Engine (
install-wheels.ps1): Handles actual installation logic, downloads, and CommandBox setupCommunication: Status files and logging system coordinate between components
Parameter Flow:
UI Controls → Pascal Functions → PowerShell Command Line → Installation LogicMaking Changes
Adding New Templates
Update template radio buttons in
InitializeWizard()functionModify
GetTemplate()function to return new template identifierVerify template exists on ForgeBox
Test installation with new template
Adding New CFML Engines
Add engine radio button in engine selection page
Update
GetEngine()function in Pascal codeTest engine installation via CommandBox
Verify compatibility with existing templates
Modifying Installation Logic
Edit PowerShell functions in appropriate
#regionblocksMaintain consistent logging using
Write-LogfunctionsUpdate error handling with
Write-LogErrorAdd status reporting for new features
UI Improvements
Modify wizard pages in
InitializeWizard()Add parameter validation in
NextButtonClick()Update getter functions for new parameters
Test parameter passing to PowerShell
Testing Your Changes
Local Testing
Build installer in Inno Setup (F9 key)
Test on clean Windows system (VM recommended)
Verify all wizard pages work correctly
Test installation completion and error scenarios
Check log files:
%TEMP%\wheels-installation.logVerify status file:
%TEMP%\wheels-install-status.txt
PowerShell Testing
Test PowerShell script directly:
.\install-wheels.ps1 -AppName "TestApp" -Template "wheels-base-template@BE"
# Check logs
Get-Content "$env:TEMP\wheels-installation.log" -Tail 20Edge Case Testing
Existing CommandBox installation
Network connectivity issues
Limited user permissions
Installation cancellation
Java version compatibility
Code Quality Standards
PowerShell Guidelines
Use approved PowerShell verbs (
Install-,Get-,Set-)Maintain consistent logging format:
[YYYY-MM-DD HH:MM:SS.fff] [LEVEL] MessageAlways use try/catch with
Write-LogErrorfor errorsAdd functions to appropriate
#regionblocks
Inno Setup Guidelines
Use CamelCase for function names
Keep getter functions simple (return values only)
Add input validation in
NextButtonClick()Document complex Pascal logic with comments
Communication Protocol
PowerShell writes status to single file:
%TEMP%\wheels-install-status.txtStatus format: Line 1 = exit code, Line 2 = log file path
Guard variables prevent duplicate status writes
Inno Setup reads status file and displays appropriate message
Building and Packaging
Build Process
Open
install-wheels.issin Inno Setup CompilerPress F9 or Build → Compile
Output generated:
installer\wheels-installer.exeTest installer on clean Windows system
Version Management
Update version in Inno Setup [Setup] section:
AppVersion=1.0Contributing Process
Follow the standard Wheels contribution process:
Open an Issue: Before making changes, open an issue in the issue tracker describing your proposed changes
Get Approval: Wait for core team approval before starting development
Fork and Branch: Create a feature branch from
developMake Changes: Implement your changes following the guidelines above
Test Thoroughly: Test on clean Windows systems with different scenarios
Submit Pull Request: Create a pull request to the
developbranch, before creating a PR, please also review Contributing to Wheels and Submitting Pull Requests guideCode Review: Address any feedback from the core team
Pull Request Guidelines
Reference the issue number in your PR description
Include clear commit messages describing changes
Test installer on multiple Windows versions if possible
Update documentation for user-facing changes
Ensure no breaking changes without proper consideration
Reporting Issues
Found a bug or have a feature request for the Windows installer?
When reporting installer-specific issues, please include:
Windows version (10/11)
PowerShell version (
$PSVersionTable.PSVersion)Installation log file (
%TEMP%\wheels-installation.log)Steps to reproduce the issue
Expected vs. actual behavior
Any error messages or dialog screenshots
Debugging
Log Analysis
# View installation logs
Get-Content "$env:TEMP\wheels-installation.log"
# Filter for errors
Get-Content "$env:TEMP\wheels-installation.log" | Select-String "ERROR|CRITICAL"
# Monitor logs in real-time
Get-Content "$env:TEMP\wheels-installation.log" -Wait -Tail 10Common Issues
Status shows -1: PowerShell script terminated unexpectedly, check execution policy
Parameter issues: Add debug output to Pascal getter functions
Installation failures: Review detailed logs for specific error messages
Release Process
Installer releases follow the main Wheels release cycle:
Changes are merged to
developbranchDuring Wheels release preparation, installer version is updated
Installer is built and tested on multiple Windows systems
Final installer executable is included in release assets
Installation instructions updated in main documentation
Support
For help with installer development:
Community Discussions - Ask questions and share ideas
Issue Tracker - Report bugs and request features
Wheels Documentation - Complete framework documentation
Last updated
Was this helpful?

