diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index ec25806..25821f2 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -184,6 +184,7 @@ jobs:
'## Requirements'
''
'- **Windows 10/11 (x64)**'
+ '- **Windows App SDK 2.4** runtime'
'- **.NET 10 Desktop Runtime** — https://dotnet.microsoft.com/download/dotnet/10.0'
''
'## Notes'
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 58259cb..c156b77 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,8 @@ All notable changes to Reentry are documented here. The format follows
## [Unreleased]
+- Launch on Windows 11 25H2: use the installed WASDK 2.4 runtime instead of the self-contained CoreMessagingXP payload (0xC0000602). Give the tray icon a generated glyph so ForceCreate has an IconSource.
+
## [0.1.0-alpha1] - 2026-08-20
First scaffold — a Windows startup / session-restore monitor.
diff --git a/README.md b/README.md
index 6a9f49d..06cc234 100644
--- a/README.md
+++ b/README.md
@@ -62,8 +62,7 @@ pwsh ./publish.ps1 -SelfContained # bundles the .NET runtime (portable, larger)
→ `publish/Reentry.exe`
-The Windows App SDK runtime is bundled (`WindowsAppSDKSelfContained=true`); the
-app is unpackaged (`WindowsPackageType=None`).
+The app is unpackaged (`WindowsPackageType=None`) and uses the installed Windows App SDK 2.4 runtime (`WindowsAppSDKSelfContained=false`). The self-contained 2.4 CoreMessagingXP payload fail-fasts on Windows 11 25H2.
---
diff --git a/publish.ps1 b/publish.ps1
index 4c9b28c..988eef0 100644
--- a/publish.ps1
+++ b/publish.ps1
@@ -1,6 +1,6 @@
# Publishes Reentry as a framework-dependent Windows app into .\publish\.
# Requires the .NET 10 Desktop Runtime on the target machine.
-# The Windows App SDK runtime is bundled (WindowsAppSDKSelfContained=true).
+# Requires the Windows App SDK 2.4 runtime (WindowsAppSDKSelfContained=false; the self-contained 2.4 CoreMessagingXP payload fail-fasts on Windows 11 25H2).
#
# Usage: pwsh ./publish.ps1 (framework-dependent .NET, small)
# pwsh ./publish.ps1 -SelfContained (bundles the .NET runtime, large but portable)
diff --git a/src/Reentry.App/Reentry.App.csproj b/src/Reentry.App/Reentry.App.csproj
index a06691f..b38354c 100644
--- a/src/Reentry.App/Reentry.App.csproj
+++ b/src/Reentry.App/Reentry.App.csproj
@@ -13,7 +13,10 @@
true
false
None
- true
+
+ false
true
false
app.manifest
@@ -38,7 +41,6 @@
all
-
@@ -50,4 +52,4 @@
-
+
diff --git a/src/Reentry.App/Services/TrayIconHost.cs b/src/Reentry.App/Services/TrayIconHost.cs
index b0ba7da..53e921b 100644
--- a/src/Reentry.App/Services/TrayIconHost.cs
+++ b/src/Reentry.App/Services/TrayIconHost.cs
@@ -19,18 +19,26 @@ public TrayIconHost(Action showHud, Action showSettings, Action exit)
public void Show()
{
- var menu = new MenuFlyout();
- menu.Items.Add(Item("Show progress", _showHud));
- menu.Items.Add(Item("Settings", _showSettings));
- menu.Items.Add(new MenuFlyoutSeparator());
- menu.Items.Add(Item("Exit", _exit));
+ try
+ {
+ var menu = new MenuFlyout();
+ menu.Items.Add(Item("Show progress", _showHud));
+ menu.Items.Add(Item("Settings", _showSettings));
+ menu.Items.Add(new MenuFlyoutSeparator());
+ menu.Items.Add(Item("Exit", _exit));
- _icon = new TaskbarIcon
+ _icon = new TaskbarIcon
+ {
+ ToolTipText = "Reentry",
+ ContextFlyout = menu,
+ IconSource = new GeneratedIconSource { Text = "R" },
+ };
+ _icon.ForceCreate();
+ }
+ catch (Exception ex)
{
- ToolTipText = "Reentry",
- ContextFlyout = menu,
- };
- _icon.ForceCreate();
+ System.Diagnostics.Debug.WriteLine(ex);
+ }
}
private static MenuFlyoutItem Item(string text, Action action)
@@ -41,4 +49,4 @@ private static MenuFlyoutItem Item(string text, Action action)
}
public void Dispose() => _icon?.Dispose();
-}
+}