Merge nucleic/olive-jade-civet-rznt into dev
This commit is contained in:
+25
-9
@@ -37,11 +37,20 @@ dotnet run -- --session # + create a session, then a SECOND one with the
|
||||
dotnet run -- --all-types # include the ABI/marshalling plumbing in the dump
|
||||
```
|
||||
|
||||
**If it reports missing components** (`VirtualMachinePlatform`, `WslPackage`), the machine cannot
|
||||
run wslc yet: `wsl --install`, reboot for the Virtual Machine Platform feature, and run again.
|
||||
Everything that reaches the service fails with `REGDB_E_CLASSNOTREG` (0x80040154) until then, and
|
||||
the tool says so rather than emitting a string of unexplained COM errors. `--session` is skipped
|
||||
in that state instead of failing.
|
||||
**If it reports missing components**, the machine cannot run wslc yet, and the two components are
|
||||
NOT fixed the same way — the tool prints the specific remedy for each:
|
||||
|
||||
| Missing | Fix |
|
||||
| --- | --- |
|
||||
| `VirtualMachinePlatform` | `wsl --install`, then **reboot** (an OS optional feature). |
|
||||
| `WslPackage` | `wsl --update --pre-release`, then `wsl --shutdown`. WSL is installed but older than the SDK, and **2.9.3 is pre-release-only — a plain `wsl --update` will not get there.** Confirm with `wsl --version`. |
|
||||
| `SdkNeedsUpdate` | The NuGet pin is ahead of the installed service: update WSL further, or pin the package back. |
|
||||
|
||||
The distinction is worth knowing because the failures look alike but mean opposite things:
|
||||
`REGDB_E_CLASSNOTREG` (0x80040154) is *nothing installed*, `ERROR_NOT_SUPPORTED` (0x80070032) is
|
||||
*installed but too old*. The tool decodes both, along with the `WSLC_E_*` range from `wslc.idl`,
|
||||
because these COM exceptions often carry an empty message and leave nothing but a hex code.
|
||||
`--session` is skipped while components are missing rather than failing the same way.
|
||||
|
||||
Note that the assumption check reads the **`Microsoft.WSL.Containers`** namespace only. That is
|
||||
correctness, not tidiness: a C#/WinRT projection also exports `ABI.Microsoft.WSL.Containers.*`
|
||||
@@ -54,10 +63,17 @@ It writes the full public object model to `wslc-api-dump.txt` (`--out` to reloca
|
||||
It exits 0 even when assumptions fail — a mismatch is the product, not an error. Only a genuinely
|
||||
broken run (the assembly won't load) exits non-zero.
|
||||
|
||||
Every path in it has been exercised against a stand-in assembly carrying the observed 2.9.3 type
|
||||
and member names — including the `ABI.` shadow types and a service that reports missing components
|
||||
and throws `0x80040154` — so a failure on your machine is a finding about wslc, not about this
|
||||
tool.
|
||||
`--probe` has been **run clean on real hardware** (Windows 11 amd64, WSL 2.9.3): 54/54 `ok`,
|
||||
no missing components. Every other path is exercised against a stand-in assembly carrying the
|
||||
observed 2.9.3 shape — the `ABI.` shadow types, a service reporting missing components, an
|
||||
`0x80070032` with an empty message, a `ServiceVersion` with no `ToString()` override, and a
|
||||
duplicate-name `Session` throwing `0x80040607` — so a failure on your machine is a finding about
|
||||
wslc, not about this tool.
|
||||
|
||||
Note the `ToString()` one, because it bit: a WinRT projection class does not override
|
||||
`ToString()`, so printing a returned object gives you its *type name*. Values are rendered by
|
||||
their properties instead — `ServiceVersion { Major=2, Minor=9, Revision=3 }`, not
|
||||
`Microsoft.WSL.Containers.ServiceVersion`.
|
||||
|
||||
**What to send back:** the console output, and `wslc-api-dump.txt` if anything is MISSING —
|
||||
which now means the package moved under us, not that we guessed wrong.
|
||||
|
||||
Reference in New Issue
Block a user