A taskbar-style launcher for Windows PE and Windows desktop, on x64 and arm64. It starts your applications and scripts, exposes the handful of system tools a technician actually needs, and stays out of the way — one self-contained executable plus one JSON file.
It is built for ISVs and MSPs: the Applications menu and the script runtime are the point.
Put your tools on the media, name them once in apps-config.json, and the media becomes your
tool with your branding.
- Native C# (WinForms / .NET 10) — no installer, no services, no runtime to download.
- Self-contained single file (
Launcher.exe+apps-config.json) — the .NET runtime is bundled, so nothing has to be installed on the target. - x64 + arm64 from one codebase; published per architecture (
win-x64,win-arm64). - WinPE-ready: the UI library (AntdUI) and fonts (Inter / Hack) are embedded — no DLL files beside the exe.
- Config-driven: a single
apps-config.json(comments and missing commas tolerated) drives apps, branding, timezone, hotkeys and UI scale. - Offline by default: only the optional Smart Assistant needs the network.
| Area | Contents |
|---|---|
| System | Shutdown / Reboot (wpeutil), Wi-Fi, BitLocker unlock, Sync time |
| System Tools | Command Prompt, Notepad, PowerShell 5.1, PowerShell 7, Task Manager, System Info, Log Diagnostics, Autopilot hash capture + viewer |
| Applications | your own entries — see below |
| Opened Windows | jump to any running window |
| Status area | System Information, screen capture, Assistant (chat), network status, clock |
Every selector — System, System Tools, Applications, Opened Windows — doubles as a search box:
start typing to filter the list, Esc clears it. With a long apps list that is the fastest way to
reach an entry.
| System | System Tools | Applications |
|---|---|---|
![]() |
![]() |
![]() |
Every entry in apps becomes a button. A relative path is searched on every ready drive under
[drive]:\CORESYSTEM\Softwares, then \CORESYSTEM\Scripts, then \CORESYSTEM — so
"PALEMOON\PALEMOON.EXE" or "ping.ps1" is all you need, and the same media works from any drive
letter. Use a full path (C:\..., X:\...) when the file lives elsewhere.
| Field | Meaning |
|---|---|
name |
label in the menu (default: file name without extension) |
path |
program or script (see the search order above) |
args |
optional command line |
cwd |
optional working directory |
icon |
optional AntdUI icon name, e.g. CodeOutlined |
startup |
true = run once automatically after the launcher loads |
shell |
.ps1 only: pwsh or ps51, overriding the global shell |
| File type | How it runs |
|---|---|
.ps1 |
<shell> -NoProfile -ExecutionPolicy Bypass -File "<path>" |
.cmd / .bat |
cmd.exe /c |
| anything else | started directly |
shell at the config root picks the default: pwsh (PowerShell 7), ps51 (Windows PowerShell
5.1, for legacy scripts) or auto (pwsh when present). The console window size is not a launcher
setting — it comes from the image (HKCU\Console), if the image sets one.
| Key | Effect |
|---|---|
whitebox |
text in the bar's left box (max 15 characters) |
timezone |
Windows time-zone id, applied in the background (pwsh Set-TimeZone) |
networkInit |
WinPE only: brings the network up at start-up behind a small dialog instead of a visible console |
uiScale |
scales the whole UI, dialogs included. 1 = 100%. FullHD → 1 or 1.25; 1440p → 1.5; 4K → 2 |
Sensible defaults are built in; the hotkeys section overrides them or sets a single binding to
"" to disable it. scope local (default) fires only while the launcher has focus, so a hotkey
can never hijack an application you opened; global also tries a system-wide registration and
falls back to local.
| Action | Default | Action | Default |
|---|---|---|---|
| System menu | Ctrl+Alt+S |
Assistant | Ctrl+Alt+H |
| Tools menu | Ctrl+Alt+T |
Diagnostics | Ctrl+Alt+D |
| Applications menu | Ctrl+Alt+A |
Screenshot | Ctrl+Alt+P |
| Opened windows | Ctrl+Alt+O |
Wi-Fi | Ctrl+Alt+W |
| Sync time | Ctrl+Alt+Y |
Shutdown | Ctrl+Alt+Q |
| Reboot | Ctrl+Alt+R |
Any OpenAI-compatible endpoint. The feature stays disabled while endpoint is empty — there is no
default provider. It runs on PowerShell 7 when present, and needs the network.
System Tools ▸ Autopilot Hash Capture reads the hardware hash with oa3tool /Report and writes
Hash-<SERIAL|NOSERIAL>-<yyyyMMdd-HHmmss>.csv to the first writable target — the USB media first,
then a freshly deployed Windows volume, then %TEMP% — together with autopilot-hash.log, which
records the group tag and every drive that was inspected. Autopilot Hash Viewer opens a CSV,
decodes the OAv3 blob and validates it (magic, checksum, records, identity fields).
What you must supply (this launcher does not ship them):
| File | Where to get it |
|---|---|
oa3tool.exe |
Windows ADK — Deployment Tools\<arch>\Licensing\OA30\oa3tool.exe |
PCPKsp.dll |
from a Windows installation (System32\PCPKsp.dll), placed in the image's System32 |
| PowerShell 7 | required by the capture; the launcher reports it if pwsh is missing |
Place oa3tool.exe next to Launcher.exe (the capture also checks System32 first).
Group tag. The capture asks for an optional Intune group tag, remembered for the session and
written as the CSV's 4th column. Intune maps it to the Entra device attribute OrderID, which is
what a dynamic device group queries so the device picks up its Autopilot deployment profile.
Commas become -, quotes and non-ASCII characters are dropped, spaces are collapsed; an empty tag
keeps the historical 3-column CSV.
This capture is a convenience, not a Microsoft-documented method. Every supported Autopilot path assumes the device is already running Windows, or that the hash comes from the OEM. If you need the official paths — OEM/CSP registration through Partner Center, or
Get-WindowsAutopilotInfo.ps1(with-OutputFile, or-Onlinestraight to Intune, which also works during OOBE viaShift+F10) — start from https://learn.microsoft.com/en-us/autopilot/add-devices.
Requires the .NET SDK 10 (no MSBuild, no Visual Studio):
build.cmd :: win-x64 AND win-arm64
build.cmd win-x64 :: one architecture
For each architecture two variants are produced side by side:
| Variant | Use it when |
|---|---|
publish\ (plain) |
the exe is embedded into boot.wim, a compressed ISO or any archive |
publish-compressed\ (single-file compression) |
the exe is stored loose (USB stick, download) |
Both end up at roughly the same size inside a compressed container; compression only costs RAM.
- Windows 10/11 x64, or WinPE amd64/arm64.
- Nothing to install: the .NET runtime is bundled.
- In WinPE,
wpeutil-based actions (shutdown, reboot, network init) need the WinPE environment; on a normal desktop they report that they are unavailable.
A WinPE image starts a GUI shell from Windows\System32\winpeshl.ini; two lines are enough:
[LaunchApps]
%windir%\system32\Launcher.exeBoth files belong in the image's Windows\System32: that is where the line above points, and the
launcher reads apps-config.json from its own folder.
The launcher brings the network up itself (networkInit) — behind a small progress dialog instead of
a visible console — so the image needs neither startnet.cmd nor a separate
wpeutil InitializeNetwork.
Auto-starting your own applications. Do not stack additional [LaunchApps] entries: the
launcher is the shell, and a second entry only races it. Put "startup": true on the entry in
apps-config.json instead — startup apps run in the order they appear in apps, one after another,
once the bar has painted.
Background reading. Microsoft's Windows PE documentation covers the theory and every way to build
the media (copype, DISM, the WinPE add-on):
https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/winpe-intro?view=windows-11
apps-config.json is both the configuration and the manual — every key is documented inline,
and it is meant to be edited per deployment. See the file itself.
Released under the MIT License — see LICENSE.
The software is provided "as is", without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose, and non-infringement. In no event shall the authors or copyright holders be liable for any claim, damages, or other liability arising from, out of, or in connection with the software or its use. You are free to use, modify and redistribute the codebase at your own discretion and at your own risk; all responsibility and liability rest with you.
Third-party components are listed in THIRD-PARTY-NOTICES.md.
Microsoft, Windows, Windows PE / WinPE and other Microsoft product names are trademarks of the Microsoft group of companies. This project is an independent work and is not affiliated with, authorized, sponsored, or endorsed by Microsoft Corporation. All other trademarks are the property of their respective owners.
WinPE is a preinstallation/rescue environment, not a general-purpose operating system. Using this launcher to build a full desktop experience on top of WinPE (persistent shell, kiosk or digital-signage use, general daily use, …) is not recommended and may violate Microsoft's licensing and usage terms for the Windows Preinstallation Environment. Recent WinPE builds keep a session alive for up to 240 hours, which makes an always-on boot environment technically easy to leave running — that is still not a supported way to operate, and this project does not endorse it.
Use the launcher for what it is meant for: temporary rescue, diagnostics, deployment and recovery.



