# Inno Setup Project Template

A starting point for creating Windows installers with Inno Setup.

## Quick Start

1. **Copy this folder** to a new location and rename it for your project
2. **Rename `Template.iss`** to `YourProjectName.iss`
3. **Generate a new GUID** for `AppId` (Tools > Generate GUID in Inno Setup)
4. **Update the `[Setup]` section** with your app name, version, publisher, etc.
5. **Add your files** to the `[Files]` section
6. **Compile** with Inno Setup Compiler (right-click > Compile)

## Files Included

| File | Description |
|------|-------------|
| `Template.iss` | Main Inno Setup script with examples |
| `gea-logo.ico` | Setup icon (replace with your own) |
| `banner.bmp` | Wizard banner image (164x314 pixels) |
| `banner-sm.bmp` | Wizard small image (55x58 pixels) |
| `README.md` | This file |

## Common Tasks

### Install Files

```iss
[Files]
Source: "MyApp.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "Data\*"; DestDir: "{app}\Data"; Flags: ignoreversion recursesubdirs
```

### Create Shortcuts

```iss
[Icons]
Name: "{group}\My App"; Filename: "{app}\MyApp.exe"
Name: "{userdesktop}\My App"; Filename: "{app}\MyApp.exe"; Tasks: desktopicon
```

### Run After Install

```iss
[Run]
Filename: "{app}\MyApp.exe"; Description: "Launch My App"; Flags: postinstall nowait
```

### Check Prerequisites

```pascal
function InitializeSetup: Boolean;
begin
  Result := True;
  if not IsDotNet48Installed then
  begin
    MsgBox('.NET Framework 4.8 is required.', mbError, MB_OK);
    Result := False;
  end;
end;
```

### Execute PowerShell

```pascal
var
  Output: String;
begin
  ExecPowerShell('Get-Process | Select-Object -First 5', Output);
  ShowResultsDialog('Processes', Output);
end;
```

### Silent Installation

```batch
:: Silent install
MySetup.exe /VERYSILENT /SUPPRESSMSGBOXES

:: Silent install with log
MySetup.exe /VERYSILENT /LOG="C:\install.log"

:: Silent uninstall
MySetup.exe /VERYSILENT /UNINSTALL
```

## Useful Constants

| Constant | Description | Example |
|----------|-------------|---------|
| `{app}` | Application directory | `C:\Program Files\MyApp` |
| `{tmp}` | Temporary directory | `C:\Users\X\AppData\Local\Temp\is-XXXXX` |
| `{userdesktop}` | User's desktop | `C:\Users\X\Desktop` |
| `{userdocs}` | User's documents | `C:\Users\X\Documents` |
| `{commonpf}` | Program Files | `C:\Program Files` |
| `{commonpf32}` | Program Files (x86) | `C:\Program Files (x86)` |
| `{autopf}` | Auto Program Files | Picks 32/64-bit automatically |
| `{win}` | Windows directory | `C:\Windows` |
| `{sys}` | System32 directory | `C:\Windows\System32` |
| `{src}` | Setup source directory | Where setup.exe is located |
| `{group}` | Start Menu folder | `C:\ProgramData\Microsoft\Windows\Start Menu\Programs\MyApp` |

## Privileges

```iss
; Requires admin (for Program Files installs)
PrivilegesRequired=admin

; User-level only (no elevation)
PrivilegesRequired=lowest

; Try admin, fall back to user
PrivilegesRequired=lowest
PrivilegesRequiredOverridesAllowed=dialog
```

## Resources

- [Inno Setup Documentation](https://jrsoftware.org/ishelp/)
- [Inno Setup Download](https://jrsoftware.org/isdl.php)
- [Pascal Scripting Reference](https://jrsoftware.org/ishelp/index.php?topic=scriptintro)

## Author

WJDT / GE Aerospace
