Als je opeens geen Windows-programma’s meer kunt uitvoeren vanuit WSL — zoals explorer.exe ., code . of clip.exe — en je krijgt foutmeldingen als:

-bash: /mnt/c/Windows/System32/cmd.exe: cannot execute binary file: Exec format error

Dan is de oorzaak vaak een ontbrekend binfmt.d-registratiebestand dat de kernel vertelt hoe hij Windows PE-bestanden moet uitvoeren.

De oplossing

Maak het bestand /usr/lib/binfmt.d/WSLInterop.conf aan met de volgende inhoud:

:WSLInterop:M::MZ::/init:PF
sudo mkdir -p /usr/lib/binfmt.d
echo ':WSLInterop:M::MZ::/init:PF' | sudo tee /usr/lib/binfmt.d/WSLInterop.conf

Start daarna de systemd-binfmt service opnieuw op om de wijziging toe te passen:

sudo systemctl restart systemd-binfmt

Wat dit doet

De binfmt_misc-entry vertelt de Linux kernel dat elk bestand dat begint met de magic bytes MZ (de DOS/PE-header die alle Windows .exe- en .dll-bestanden gebruiken) uitgevoerd moet worden via /init — het WSL interop-binaire bestand — met de vlaggen P (preserve argv[0]) en F (fix binary).

Zonder dit bestand weet de kernel niet wat hij met .exe-bestanden moet doen en weigert hij ze uit te voeren.

Waarom het bestand verdwijnt

Dit bestand wordt normaal geleverd als onderdeel van de WSL Linux kernel-pakketten. Het kan verdwijnen na:

  • Een distro-upgrade die WSL-specifieke pakketten overschrijft of verwijdert
  • Handmatig opruimen van /usr/lib/binfmt.d/
  • Het installeren van een minimale of containergerichte distro-image die het nooit bevatte

Verifiëren

Controleer na het herstarten van systemd-binfmt of de entry actief is:

cat /proc/sys/fs/binfmt_misc/WSLInterop

De uitvoer moet beginnen met enabled. Test het daarna:

explorer.exe .

De huidige map zou moeten openen in Windows Verkenner.