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/windows
Verify 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 guide
Architecture 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 Logic
Making 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
#region
blocksMaintain consistent logging using
Write-Log
functionsUpdate error handling with
Write-LogError
Add 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.log
Verify 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 20
Edge 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] Message
Always use try/catch with
Write-LogError
for errorsAdd functions to appropriate
#region
blocks
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.txt
Status 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.iss
in Inno Setup CompilerPress F9 or Build → Compile
Output generated:
installer\wheels-installer.exe
Test installer on clean Windows system
Version Management
Update version in Inno Setup [Setup]
section:
AppVersion=1.0
Contributing 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
develop
Make 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
develop
branch, 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 10
Common 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
develop
branchDuring 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?