Migrating from v1
Version 2.x changes the public API substantially.
Configuration model
ExternalAppConfiguration was removed and replaced by ExternalAppOptions.
Launchcontains startup and process-lifetime options.Embeddingcontains embedding mode, startup embedding behavior, and whether window chrome dimensions are compensated for during sizing.Selectioncontains timeout and polling behavior.
Launch.Executable can now be either a full path or a command name. %VAR% expansion is supported for both Launch.Executable and Launch.WorkingDirectory, and Launch.EnvironmentVariables can override values during expansion.
When Launch.UseExistingProcess is enabled, startup becomes discovery-only and skips process creation entirely.
Window identification
Static matcher properties are no longer part of the library API.
- removed title matching
- removed class-name matching
- removed process-name matching
- removed command-line matching
- removed skip-count matching
Instead, handle WindowSelectionRequested and select a window from the current ExternalWindowCandidate list.
The selection event now also provides:
RequestedExecutablePathto help correlate launcher stubs and process handoff scenariosNewlyDiscoveredCandidatesto help prefer windows that appeared during the current start attempt
Candidate windows also expose compatibility hints:
PrefersExternalHostingEmbeddingCompatibilityWarning
Those hints indicate that the selected window may be a poor candidate for Win32 reparenting and may need to remain external.
Native dependency removal
The library no longer ships or depends on WinEmbed.dll. Full-window and client-area embedding are implemented in managed code with Win32 interop.
There is no dedicated EmbedMethod.External in v2. If a selected window cannot be reparented, the library keeps it external, logs a warning, and keeps the session alive.
